我正在編寫一個連續的輪詢循環來監視某些事件發生,然後在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 while循環沒有任何代碼了,因爲我想測試,如果我運行一個無限循環的用戶界面不會阻止,但它不是按預期工作,當代碼運行此循環時(將永不返回),UI凍結並變得無法響應,直到我終止運行。
我應該做的,使其在後臺靜默運行,
注:從那裏調用此方法是一個Web瀏覽器控件s
documentcompelte`事件父。 Web瀏覽器控件位於Windows窗體應用程序內部。
我編輯了你的標題。請參閱:「[應該在其標題中包含」標籤「](http://meta.stackexchange.com/questions/19190/)」,其中的共識是「不,他們不應該」。 –
謝謝,我的壞:( – shashank