我有一个带有 webbrowser 控件的表单,并编写了如下代码:
bool DocumentComplete = false;
Form_Activated()
{
for()
{
for()
{
//Some operation
Browser.Navigate(URL);
while(!DocumentComplete)
{
Thread.Sleep(100);
Application.DoEvents();
}
Data = Browser.Document.Body.GetAttribute(some_tag)
//process "Data" and do other stuff
}
}
}
Browser_DocumentComplete()
{
DocumentComplete = true;
}
我有多个 for 循环和许多变量,这就是为什么我无法将“数据”处理代码粘贴到Browser_DocumentComplete()
自身中,例如:
Browser_DocumentComplete()
{
Data = Browser.Document.Body.GetAttribute(some_tag)
//process "Data" and do other stuff
}
这是正确的方法吗?有什么选择吗?有人建议使用“Timer”控件或“BackgroundWorker”,但我想知道如何修改我的代码以使用 Timer 而不会影响程序的功能。
还有一个问题,如果我使用 Thread.Sleep 暂停代码执行直到 URL 完全打开,那么这个 Thread.Sleep 是否也会暂停 webbrowser 的导航过程?我的意思是以下代码更好:
while(!DocumentComplete)
Application.DoEvents();
代替:
while(!DocumentComplete)
{
Thread.Sleep(100);
Application.DoEvents();
}