试图模仿WebBrowser控件延迟

时间:2011-02-28 01:59:42

标签: c# .net webbrowser-control

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

但是,有时控制需要5-10秒才能完成此操作。因为我在应用程序启动时执行此操作(使用DocumentText = ""消隐窗口),并且仍然需要永远执行此操作,我想以某种方式线程这个或类似的东西,以便应用程序的其余部分可以在控件启动时......尽其所能。

作为参考,有问题的功能是:

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引起的,而是由我从示例中省略的一些代码引起的,因为我认为这无关紧要:

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()的号召是永远的。该函数的内容如下所示:

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实际需要文件时,我才会点击网络。

1 个答案:

答案 0 :(得分:0)

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