【问题标题】:WinForm WebBrowser Control slow to load. Best Method for pre-loading?WinForm WebBrowser 控件加载缓慢。预加载的最佳方法?
【发布时间】:2010-06-21 15:39:38
【问题描述】:
我们的 winform 应用程序中有一个摘要视图,它使用 WebBrowser 控件来显示来自网页的摘要信息。我们正在使用它来获得一些我们无法使用标准 winform 控件完成的丰富的表格布局。第一次在客户端上显示视图需要一段时间才能启动(我假设在后台启动 IE)并且应用程序冻结了几秒钟。我正在考虑某种可以让 IE 在后台启动的预加载机制,并希望得到一些社区指导。
我正在考虑在应用启动时使用网络浏览器控件启动屏幕外或不可见的表单,或者在应用启动时在某种侧线程中启动 IE 实例。
有什么建议吗?
【问题讨论】:
标签:
winforms
webbrowser-control
web-to-winforms
【解决方案1】:
您可以在应用程序启动期间在单独的线程中预加载控件。
请注意 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();
}
}
}
【解决方案2】:
我没有经历过你提到的启动滞后,但作为一个想法,在启动时你可以导航到about:blank。然后在浏览器的DocumentCompleted 事件中,您可以开始导航到正确的 URL。这可能有助于您了解是您的“IE 启动”一直占用您的时间,还是内容查询和呈现。
就您的架构而言,当然,除非您的“丰富的表格布局”已经构建并且功能齐全,否则您可能会考虑使用 WPF(它也有一个很好的 WinForms 集成故事),以便获得一些更丰富、更性感的控件你的应用程序。