等待WebBrowser ajax内容

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)

以上对我有用......


She*_* 蒋晟 6

不要阻止主线程的消息泵.由于浏览器是STA组件,因此如果阻止消息泵,xmlhttprequest将无法从后台线程引发事件.您无法在后台线程中导航.Webbrowser ActiveX的Windows窗体包装器不支持从UI线程以外的其他线程进行访问.请改用计时器.