我正在编写一个连续的轮询循环来监视某些事件发生,然后在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