首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebBrowser控制延时的尝试

问WebBrowser控制延时的尝试
EN

Stack Overflow用户
提问于 2011-02-28 01:59:42
回答 1查看 432关注 0票数 1

我使用WebBrowser控件作为特殊类型标记的“预览”。我处理标记,然后设置浏览器的DocumentText属性来显示它。这个很好用。

然而,有时控件需要5-10秒以上才能完成此操作。由于我在应用程序启动时执行此操作(用DocumentText = ""填充窗口),并且仍然要花费很长时间才能做到这一点,所以我希望以某种方式线程化这个或其他东西,以便应用程序的其余部分能够在控件启动时启动。做它做的一切。

为供参考,所涉职能是:

代码语言:javascript
复制
private void btnRefresh_Click(object sender, EventArgs e) {
    try {
        scrolltop = html.Document.Body.ScrollTop;
        scrollleft = html.Document.Body.ScrollLeft;
    } catch (NullReferenceException) { }

    html.DocumentText = HtmlProcessing.ProcessCode(txtCode.Text); //takes 5-10 seconds
}

我知道我不能仅仅启动一个线程来处理这个问题,因为我假设如果我试图从另一个线程访问它,WebBrowser控件就会弹出。我还能用什么其他技术来做这件事吗?

编辑:

结果表明,我的延迟不是由html.DocumentText造成的,也不是由HtmlProcessing.ProcessCode造成的,而是因为我从示例中省略了一些代码,因为我认为这是不相关的:

代码语言:javascript
复制
private void btnRefresh_Click(object sender, EventArgs e) {
    try {
        scrolltop = html.Document.Body.ScrollTop;
        scrollleft = html.Document.Body.ScrollLeft;
    } catch (NullReferenceException) { }

    html.DocumentText = HtmlProcessing.ProcessCode(txtCode.Text, GetImageList());
}

打给GetImageList()的电话花了很长时间。函数的内容类似于:

代码语言:javascript
复制
List<string> GetImageList() {
    List<string> ret = new List<string>();

    ret.AddRange(Directory.GetFiles(settings.LocalImageFolder).Where((f) => { return extensions.Contains(Path.GetExtension(f)); }));

    ret.AddRange(Directory.GetFiles(settings.RemoteImageFolder).Where((f) => { return extensions.Contains(Path.GetExtension(f)); }));

    return ret;
}

而且,事实上,settings.RemoteImageFolder是一条需要花费很长时间的网络路径。最后我把它变成了一个IEnumerable<string>。这样,我只在ProcessCode真正需要文件的时候才访问网络。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-07-15 16:50:48

问题是网络访问速度慢,隐藏在属性访问器后面,与web浏览器控件无关。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5137538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档