Webサイトが読み込まれるまで(私はWindows.Forms.WebBrowserを使用する)、自分のコードの実行をやめたいです。私はAutoResetEventを使うべきだと読んでいますが、以前はスレッディングに関連するクラスは使用していません。私はこのコードを書いていますが、それは私のプログラムをフリーズするだけです。AutoResetEventを使用してイベントを処理するのを待つ
var evt = new AutoResetEvent(false);
webBrowser.DocumentCompleted += (sender1, e1) =>
{
if (webBrowser.ReadyState == WebBrowserReadyState.Complete)
{
evt.Set();
}
};
webBrowser.Navigate("https://www.google.com/");
evt.WaitOne(); //wait to evt.Set() call
//...
//further code
可能な重複[スレッドは完全にGUIがフリーズ](のhttp:// stackoverflowの.com/questions/10423966/threads-totally-freezes-the-gui) –
WaitOneの後のコードをDocumentCompletedイベントハンドラに移動するだけではどうですか? –
DocumentCompletedイベントは、UIスレッドがアイドル状態のときにのみ起動できます。アイドル状態ではなく、WaitOne()呼び出しでスタックされています。これはデッドロックと呼ばれます。 *決して* UIスレッドをブロックしないでください。 WaitOne呼び出しの後でコードをDocumentCompletedイベントハンドラに移動するだけです。 –