我正在编写一个连续的轮询循环来监视某些事件发生,然后在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); },TaskContinuationoptions.None,TaskScheduler.FromCurrentSynchronizationContext()).ContinueWith((prevTask) => { if (!prevTask.IsFaulted) { if (control.Invokerequired) { control.Invoke(callback); } else { callback(); } } },TaskScheduler.FromCurrentSynchronizationContext()); try { ////popupTask.Wait(); } catch (AggregateException ex) { ex.Handle(exnew => { return true; }); } }
do while循环现在没有任何代码,因为我想测试一下,如果我无限地运行一个循环,UI不会阻塞,但是,它没有按预期工作,当代码运行这个循环时(永远不会返回) UI冻结并变得无响应,直到我打破了运行.
注意:调用此方法的父级是Web浏览器controlsdocumentcompelte`事件. Web浏览器控件位于Windows窗体应用程序中.
解决方法
原文地址:https://www.jb51.cc/csharp/96391.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。