Winform Webbrowserコントロールが遅くなります。プリロードに最適な方法は?
-
28-09-2019 - |
質問
Winformアプリには、Webbrowserコントロールを使用してWebページから概要情報を表示する要約ビューがあります。これを使用して、標準のWinFormコントロールを使用して達成できなかった豊富な表形式レイアウトを獲得しています。クライアントにビューが初めて表示されると、スピンアップするのに時間がかかります(私が想定しているバックグラウンドでIEを起動)、アプリはかなり数秒間フリーズします。私は、バックグラウンドでIEが紡がれ、コミュニティのガイダンスを希望するある種のプレロードメカニックを検討しています。
アプリの開始時にWebbrowserコントロールを備えたオフスクリーンまたは目に見えないフォームを起動するか、APP Startで何らかのサイドスレッドで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へのナビゲーションを開始できます。それは、常に時間をかけているのがあなたの「つまりスピンアップ」なのか、それともコンテンツクエリとレンダリングをレンダリングしているのかを理解するのに役立つかもしれません。
アーキテクチャに関しては、もちろん「リッチな表形式のレイアウト」がすでに構築されており、完全に機能していない限り、WPF(優れたWinforms統合ストーリーもあります)を使用して、より豊かでセクシーなコントロールをアプリに入れることを検討してください。