3

WinFormアプリには、WebBrowserコントロールを使用してWebページの要約情報を表示する要約ビューがあります。これを使用して、標準のWinFormコントロールでは実現できなかった豊富な表形式のレイアウトを取得しています。ビューがクライアントに初めて表示されるときは、スピンアップするのにしばらく時間がかかり(私が想定しているバックグラウンドでIEを起動します)、アプリはかなりの数秒間フリーズします。私は、IEをバックグラウンドでスピンアップさせ、コミュニティのガイダンスを求めている、ある種のプリロードメカニズムを検討しています。

アプリの起動時にウェブブラウザコントロールを使用してオフスクリーンまたは非表示のフォームを起動するか、アプリの起動時にある種のサイドスレッドでIEインスタンスを起動することを検討しています。

助言がありますか?

4

2 に答える 2

3

アプリケーションの起動時に別のスレッドでコントロールをプリロードできます。一部の COM オブジェクト (WebBrowser など) を操作する場合は、STA アパートメントの状態が必須であることに注意してください。

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

}
于 2012-07-09T07:53:54.503 に答える
2

あなたが言及した起動の遅れを経験したことはありませんが、アイデアとして、起動時にに移動できますabout:blank。次に、ブラウザのDocumentCompletedイベントで、適切な URL へのナビゲーションを開始できます。これは、常に時間がかかっているのが「IE スピンアップ」なのか、それともコンテンツ クエリとレンダリングなのかを理解するのに役立ちます。

アーキテクチャに関しては、もちろん、「豊富な表形式のレイアウト」が既に構築されていて、完全に機能していない限り、よりリッチで魅力的なコントロールをアプリに組み込むために、WPF の使用を検討することもできます (WinForms との統合についても良い話があります)。

于 2010-06-21T15:48:23.223 に答える