いくつかのイベントが発生するのを監視し、UIスレッドで何らかのアクションを取るために、連続ポーリングループを作成しています。タスク継続ブロックUIスレッド
ループは、私は無限ループを実行する場合、UIはブロックしないことをテストしたいので、しかし、それはないが、今の任意のコードを持っていませんが、私は次のコード
public static void HandlePopup(this HostedControl control, string className, string caption, System.Action callback)
{
var popupTask = Task.Factory.StartNew(() =>
{
Thread.Sleep(5000); // just wait for 5 seconds.
}, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).ContinueWith((prevTask) =>
{
AutomationElementCollection collection = null;
do
{
} while (true);
}, CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext()).ContinueWith((prevTask) =>
{
if (!prevTask.IsFaulted)
{
if (control.InvokeRequired)
{
control.Invoke(callback);
}
else
{
callback();
}
}
}, CancellationToken.None, TaskContinuationOptions.None, TaskScheduler.FromCurrentSynchronizationContext());
try
{
////popupTask.Wait();
}
catch (AggregateException ex)
{
ex.Handle(exnew =>
{
return true;
});
}
}
にDOを書いています期待どおりに動作し、コードがこのループを実行すると(戻りません)、UIがフリーズし、実行を中断するまで応答しなくなります。
私は何をして、それがバックグラウンドで実行させるために行う、
注意する必要があります。このメソッドが呼び出された場所からの親は、Webブラウザコントロールs
documentcompelte`イベントです。 Webブラウザコントロールは、Windowsフォームアプリケーション内にあります。
タイトルを編集しました。 「[質問には「タイトル内に「タグ」を含める必要がありますか」(http://meta.stackexchange.com/questions/19190/)」を参照してください。コンセンサスは「いいえ、そうすべきではありません」です。 –
ありがとう、私の悪い:( – shashank