3 Stimmen

C# BackgroundWorker überspringt DoWork und geht direkt zu RunWorkerCompleted

Ich bin neu mit C#, also sei bitte nachsichtig mit mir!

Bisher habe ich eine Konsolenanwendung, die auf Clientverbindungen hört und entsprechend antwortet.

Ich habe auch ein WPF-Formular mit einer Schaltfläche und einem Textfeld. Die Schaltfläche startet einige Code, um sich als BackgroundWorker mit dem Server zu verbinden, der dann auf eine Antwort wartet, bevor er sie am Ende des Textfeldes anhängt.

Das funktioniert super, einmal. Manchmal auch zweimal. Aber dann hat es angefangen abzustürzen - es stellte sich heraus, dass der DoWork-Block überhaupt nicht aufgerufen wurde und er direkt zu RunWorkerCompleted ging. Natürlich ist das .result leer, also schlägt der Versuch, es in einen String umzuwandeln, fehl.

Ist das ein Anfängerfehler? Ich habe versucht, im Internet nach verschiedenen Möglichkeiten zu suchen, das oben Gesagte auszudrücken, bin aber auf nichts Nützliches gestoßen...

Das ist der Code bisher: http://pastebin.com/ZQvCFqxN - es gibt so viele Debug-Ausgaben von mir, während ich versucht habe herauszufinden, was genau schief gelaufen ist.

Dies ist das Ergebnis der Debug-Ausgaben: http://pastebin.com/V412mppX

Jede Hilfe ist sehr willkommen. Vielen Dank!

BEARBEITEN: Der relevante Code nach der Korrektur (danke an Patrick Quirk unten) ist:

public void dorequest(string query)
{
    request = new BackgroundWorker();
    request.WorkerSupportsCancellation = true;
    request.WorkerReportsProgress = true;
    request.ProgressChanged += request_ProgressChanged;
    request.DoWork += request_DoWork;
    request.RunWorkerCompleted += request_RunWorkerCompleted; 
    request.RunWorkerAsync(query);
}

7voto

Patrick Quirk Punkte 22488

Sie hängen Ihren DoWork-Handler nach dem Aufruf von RunWorkerAsync an. Drehen Sie das um und das sollte das Problem beheben.

Außerdem, hängen Sie in Zukunft bitte den Code in Ihre Frage ein anstatt eine externe Seite zu verwenden. Und geben Sie wenn möglich die kleinste Menge an Code, die das Problem zeigt. Das erleichtert uns und Personen, die das gleiche Problem haben könnten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X