该代码应从网页中获取一条信息。我的问题是它不会显示出来,也不知道为什么。
我想以某种方式等待文档完成而不创建该功能。
我想从较大文件中修复的实际代码:
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
}
这不会像您尝试这样做的方式一样工作。您的函数在页面之前返回。
因此,您唯一可以做的就是将回调转到您在代表内执行的getNews-unction。
Sync< -> async。
的旧问题此外,您应该交换语句。为了确保"页面"在重新加载任何内容之前都具有回调集。
[编辑]为此,您需要创建一个委托并更改您的功能:
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);
} );
}