3

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

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

有什么建议么?

4

2 回答 2

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();
        }
    }

}
于 2012-07-09T07:53:54.503 回答
2

我没有经历过你提到的启动滞后,但作为一个想法,在启动时你可以导航到about:blank. 然后在浏览器DocumentCompleted事件中,您可以开始导航到正确的 URL。这可能会帮助您了解始终占用您的“IE 启动”还是内容查询和呈现。

就您的架构而言,除非您的“丰富的表格布局”当然已经构建并且功能齐全,否则您可能会考虑使用 WPF(它也有一个很好的 WinForms 集成故事),以便在您的应用程序中获得一些更丰富、更性感的控件。

于 2010-06-21T15:48:23.223 回答