2017-02-25 3 views
0

Dieser Code sollte eine Information von einer Webseite enthalten. Mein Problem ist, dass es nicht korrekt zeigt und nicht weiß warum.C# -Variable wird verwendet, bevor der Wert festgelegt wird

Ich möchte es irgendwie auf die Fertigstellung von Dokumenten warten, ohne eine Funktion außerhalb dieser zu erstellen.

Der eigentliche Code, den ich aus einer größeren Datei reparieren möchten:

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 
} 
+2

Did:

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); }; } 

Danach werden Sie es nennen diese Art und Weise möchten Versuchen Sie, Ihre 'MessageBox.Show' innerhalb der' Delegate' Funktion zu platzieren? –

Antwort

1

Dies wird die Art und Weise Sie es zu tun versuchen, nicht funktionieren. Ihre Funktion gibt zurück, bevor der page.DocumentCompleted-delegate ausgeführt wird.

Also das einzige, was Sie tun können, ist einen Callback an Ihre GetNews-Funktion übergeben, die innerhalb Ihrer Stellvertretung ausgeführt wird.

Das alte Problem mit der Synchronisierung < -> async.

Außerdem sollten Sie die Anweisungen tauschen .Navigate und .DocumentCompleted + = sicher „Seite“ zu machen, hat der Rückruf einstellen, bevor es überhaupt etwas zu laden beginnt.

[Bearbeiten] Um das zu tun, müssen Sie einen Delegaten erstellen und Ihre Funktion ändern:

Sie
void CallMyNews(){ 
    GetNews((dataReceived) => { 
     DoSomeStuffWith(dataReceived); 
    }); 
} 
+0

oh .. und wie mache ich das? – jeaks

+0

Das ist ein bisschen Arbeit hier, ich werde die Antwort entsprechend bearbeiten – Psi

Verwandte Themen