此代码应从网页中获取一条信息。我的问题是,它并没有显示出来,并且不知道为什么。
我想以某种方式让它等待文档完成而不在那个之外创建一个函数。
我想从更大的文件中修复的实际代码:
public static string GetNews()
{
WebBrowser page = new WebBrowser();
string data = null;
page.Navigate(launcherScriptAddress);
page.DocumentCompleted += delegate {
data = page.Document.GetElementById("news").InnerText;
// can't return `data` from here
};
return data; // returns null because it doesn't wait for document to be completed
}
答案 0 :(得分:1)
这不会像你尝试的那样工作。您的函数在正在执行page.DocumentCompleted-delegate之前返回。
所以你唯一能做的就是将回调传递给你的代表中执行的GetNews函数。
同步的旧问题< - >异步。
此外,您应该交换语句.Navigate和.DocumentCompleted + = 确保“page”在开始加载任何内容之前设置回调。
[编辑] 为此,您需要创建一个委托并更改您的功能:
public delegate void NewsCallback( string dataReceived );
public static void GetNews( NewsCallback callback )
{
WebBrowser page = new WebBrowser();
string data = null;
page.Navigate(launcherScriptAddress);
page.DocumentCompleted += delegate {
data = page.Document.GetElementById("news").InnerText;
callback( data );
};
}
之后,您可能想以这种方式调用它:
void CallMyNews(){
GetNews( (dataReceived) => {
DoSomeStuffWith(dataReceived);
} );
}