WinForm WebBrowser控件加载缓慢。预加载的最佳方法?

时间:2010-06-21 15:39:38

标签: winforms webbrowser-control web-to-winforms

我们的winform应用程序中有一个摘要视图,它使用WebBrowser控件显示网页的摘要信息。我们使用它来获得一些我们无法使用标准winform控件无法实现的丰富的表格布局。第一次在客户端上显示视图时需要一段时间才能启动(我假设在后台启动IE)并且应用程序冻结了几秒钟。我正在考虑某种预加载机制,它会让IE在后台运行,并希望获得一些社区指导。

我正在考虑在应用启动时使用webbrowser控件启动屏幕外或不可见的表单,或者在应用启动时在某种侧线程中启动IE实例。

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

您可以在应用程序启动期间在单独的线程中预加载控件。 注意STA单元状态,如果要操作某些COM对象(如WebBrowser),这是必需的。

public static class ControlPreloader
{


    public static void PreloadAsync()
    {
        var thread = new Thread(Preload);
        thread.SetApartmentState(ApartmentState.STA);
        thread.Start();
    }

    private static void Preload()
    {
        using (var hostForm = new Form())
        {
            var control = new WebBrowser();
            hostForm.Controls.Add(control);
            control.CreateControl();

            hostForm.Close();
        }
    }

}

答案 1 :(得分:2)

我没有经历过你提到的启动延迟,但作为一个想法,在启动时你可以导航到about:blank。然后在浏览器的DocumentCompleted事件中,您可以启动导航到正确的URL。这可能有助于您了解是否是您的“IE旋转”,它一直在花费所有时间或内容查询和渲染。

就您的体系结构而言,除非您的“丰富表格布局”已经构建并且功能齐全,否则您可以考虑使用WPF(它也有一个很好的WinForms集成故事),以便获得更丰富和更性感的控件。你的应用。

相关问题