Joe*_*oeR 10 .net c# browser multithreading
我想暂停执行我的线程,直到通过ajax将特定的div加载到WebBrowser实例中.显然,我可以不断检查这个div的存在,例如:
while (Browser.Document.GetElementById("divid") == null) { Thread.Sleep(200); }
Run Code Online (Sandbox Code Playgroud)
但是,睡眠浏览器位于循环之间的线程只会阻止浏览器首先实际加载内容.因此,我似乎需要Browser.Navigate
在一个单独的线程中执行该方法 - 然后我可以继续检查/等待div的存在,同时WebBrowser实例继续加载我要求它的URL.
然而,我在这方面的尝试已经失败了,我会重视我应该如何解决这个问题.我认为只是调度一个新的线程new Thread(() => { Browser.Navigate(url); });
可以工作,但在这样做之后,没有任何加载,Browser.ReadyState仍然是'未初始化'.我认为我误解了如何使用C#正确地处理这样的程序,并且会重视一些建议!
小智 7
以下应该工作,
while (Browser.Document.GetElementById("divid") == null)
{
Application.DoEvents();
Thread.Sleep(200);
}
Run Code Online (Sandbox Code Playgroud)
以上对我有用......
不要阻止主线程的消息泵.由于浏览器是STA组件,因此如果阻止消息泵,xmlhttprequest将无法从后台线程引发事件.您无法在后台线程中导航.Webbrowser ActiveX的Windows窗体包装器不支持从UI线程以外的其他线程进行访问.请改用计时器.