在确定其值之前使用 C# 变量

C# variable is used before it's value is determined

这段代码应该从网页中获取一段信息。我的问题是它没有正确显示并且不知道为什么。

我想以某种方式让它等待文档完成而不在该文档之外创建函数。

我想从更大的文件中修复的实际代码:

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
}

这不会像您尝试的那样工作。你的函数 returns 在 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);
    } );
}