我们的winform应用程序中有一个摘要视图,它使用WebBrowser控件显示网页的摘要信息。我们使用它来获得一些我们无法使用标准winform控件无法实现的丰富的表格布局。第一次在客户端上显示视图时需要一段时间才能启动(我假设在后台启动IE)并且应用程序冻结了几秒钟。我正在考虑某种预加载机制,它会让IE在后台运行,并希望获得一些社区指导。
我正在考虑在应用启动时使用webbrowser控件启动屏幕外或不可见的表单,或者在应用启动时在某种侧线程中启动IE实例。
有什么建议吗?
答案 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集成故事),以便获得更丰富和更性感的控件。你的应用。