2010-06-21 233 views
3

我們在我們的winform應用程序中有一個摘要視圖,它使用WebBrowser控件來顯示網頁中的摘要信息。我們使用這個來獲得一些豐富的表格佈局,我們無法使用標準的winform控件來完成。第一次在客戶端顯示視圖時,需要一段時間才能旋轉(我假設在後臺啓動IE),並且應用程序凍結了幾秒鐘。我正在考慮某種預加載機制,它會讓IE在後臺運行並希望得到一些社區指導。WinForm WebBrowser控件加載速度慢。最佳的預加載方法?

我正考慮在應用程序啓動時使用webbrowser控件啓動屏幕或隱形窗體,或者在應用程序啓動時以某種側線啓動IE實例。

有什麼建議嗎?

回答

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

} 
2

我沒有遇到你提到的啓動滯後,但作爲一個想法,在啓動時,你可以導航到about:blank。然後在瀏覽器的DocumentCompleted事件中,您可以啓動導航到適當的URL。這可能會幫助你瞭解是否你的「IE spin-up」需要時間或內容查詢和渲染。爲了獲得更豐富,更性感的控件,你可以考慮使用WPF(它也有一個很好的WinForms集成故事),除非你的「豐富表格佈局」已經被構建並且功能完整,否則你可能會考慮使用WPF到您的應用程序。

+0

有點晚了,但也檢查一下:http://www.codeproject.com/KB/GDI-plus/HtmlRenderer.aspx – FastAl 2011-08-17 14:23:29