您在这里处理的是尝试同步调用固有的异步方法。
正如您在对问题的评论中提到的那样,不使用的原因DocumentCompleted
是您需要将该事件用于其他目的,我建议您做的是使用该DocumentCompleted
事件,再加上一个私有类布尔标志来确定这是否是DocumentCompleted
与否的特例。
private bool wbNeedsSpecialAction; //when you need to call the special case of Navigate() set this flag to true
public Form1()
{
InitializeComponent();
wb.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(wb_DocumentCompleted);
}
void wb_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (wbNeedsSpecialAction)
{
richtextdocument.Text = wb.DocumentText;
wbNeedsSpecialAction = false;
}
else
{
//other cases of using DocumentCompleted...
}
}
public void Browse()
{
wbNeedsSpecialAction = true; //make sure the event is treated differently
wb.Navigate("http://www.google.com");
}
这仍然允许您控制事件处理程序中的其他情况。
Navigate()
您必须特别注意确保您的用户在此“特殊操作”页面完成加载之前无法触发另一个调用,否则它可能会窃取特殊情况事件。一种方法可能是阻止 UI 直到页面完成加载,例如:
Cursor.Current = Cursors.WaitCursor;