Winform webbrowser控制速度慢加载。预加载的最佳方法?
-
28-09-2019 - |
题
我们在Winform应用程序中有一个摘要视图,该应用程序使用WebBrowser控件从网页显示摘要信息。我们正在使用它来获得一些丰富的表格布局,我们无法使用标准Winform控件来完成这些布局。第一次在客户端显示旋转需要一段时间的视图(我假设在背景中启动IE),并且该应用程序冻结了相当长的几秒钟。我正在考虑某种预加载机械师,这些机制将在后台启动,并希望有一些社区指导。
我正在考虑在应用程序启动时使用WebBrowser控件启动屏幕外或不可见的表单,或在应用程序开始时以某种侧线程启动IE实例。
有什么建议么?
解决方案
您可以在应用程序启动期间,在单独的线程中预加载控件。请注意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();
}
}
}
其他提示
我没有经历过您提到的启动滞后,但是作为一个想法,在启动时,您可以导航到 about:blank
. 。然后在浏览器的 DocumentCompleted
活动您可以启动通道到适当的URL。这可能有助于您了解是您的“ IE旋转”是否一直花费在内,或者是内容查询和渲染。
就您的体系结构而言,除非您的“丰富的表格布局”已经建立和功能齐全,否则您可以考虑使用WPF(它也具有良好的Winforms集成故事),以便将一些更丰富和更性感的控件进入您的应用程序。
不隶属于 StackOverflow