2016-08-14 2 views
-1

Ich habe einen Backrgound Worker, der keinen Fortschritt meldet. Ich brauche einen genauen Wert, nicht einen Prozentsatz. Ich bin mir nicht sicher, wie ich das Ereignis mit geändertem Fortschritt programmieren soll. Ich habe die WorkReportsProgress-Eigenschaft auf true festgelegt. Ich bin noch relativ neu in C#, also entschuldige mein schlechtes Wissen.Hintergrund-Worker meldet keinen Fortschritt

private void BKGWork_DoWork(object sender, DoWorkEventArgs e) 
    { 
     BackgroundWorker worker = sender as BackgroundWorker; 
     for (int i = 1; i <= 20; i++) 
     { 
      //do work 
      worker.ReportProgress(i); 
     } 
    } 
private void BKGWork_ProgressChanged(object sender, ProgressChangedEventArgs e) 
    { 
     //not sure how to get the exact value of i and compare it to see which loop the background worker is in. 
    } 

Antwort

1

Verwenden Sie worker.ReportProgress(0,i);, um Ihren expliziten Wert als Benutzerstatusparameter zu übergeben. Verwenden Sie diese in e.UserState zugreifen kann es in ein int

+0

Versucht diese Methode, aber immer noch kein Ergebnis. Die Konsole ist komplett leer. –

+0

Haben Sie 'RunWorkerAsync' aufgerufen, um den Hintergrund-Worker zu starten? Und bist du sicher, dass dein Event-Handler abonniert ist? – FloatingKiwi

+0

Ich finde es heraus, ich hatte das ProgressChanged Ereignis nicht erklärt. Deine Methode funktioniert. –

2

Casting Was auch immer Sie zu ReportProgress passieren als erste Parameter ist der Wert, den Sie in e.ProgressPercentage erhalten, kann die Klasse Background keine ‚Prozentsatz‘ für Sie berechnen. Wenn Sie eine komplexere Daten (eine Instanz einer Klasse zum Beispiel benötigen könnten Sie das zweite optionale Argument von Report verwenden und es im Userstate Parameter

private void BKGWork_DoWork(object sender, DoWorkEventArgs e) 
{ 
    BackgroundWorker worker = sender as BackgroundWorker; 
    for (int i = 1; i <= 20; i++) 
    { 
     //do work 
     worker.ReportProgress(i); 
    } 
} 
private void BKGWork_ProgressChanged(object sender, ProgressChangedEventArgs e) 
{ 
    // This is the value of the variable i passed above 
    Console.WriteLine(e.ProgressPercentage); 
} 

Nach Sie abrufen Kommentar unten scheint es, dass Sie nicht haben Richten Sie einen Breakpoint (F9) in der Zeile innerhalb des ProgressChanged-Ereignisses ein und führen Sie das Programm aus (F5) .Wenn der Breakpoint nicht getroffen wird, prüfen Sie, ob Sie den Event-Handler korrekt eingerichtet haben Setzen Sie den Ereignishandler im Designer oder im Code korrekt ein, andernfalls wird der Ausgabebereich des Visual Studio angezeigt (zur Laufzeit wird in einer Nicht-Konsolenanwendung die Konsolenausgabe zum Ausgabefenster von Visual Studio umgeleitet)

+0

Ich bekomme nichts auf der Konsole. Vollständig leer –

+0

Wenn Sie einen Debugger verwenden können, setzen Sie einen Haltepunkt in die Zeile im ProgressChanged-Ereignis und führen Sie das Programm aus. Wenn der Haltepunkt nicht berührt wird, prüfen Sie, ob Sie den Ereignishandler im Designer oder im Code richtig gesetzt haben. Andernfalls wird das Ausgabefenster nicht betrachtet (zur Laufzeit wird in einer Nicht-Konsolenanwendung die Konsolenausgabe in das Ausgabefenster von Visual Studio umgeleitet). – Steve

+0

Ich hatte den Ereignishandler für ProgressChanged nicht deklariert Veranstaltung. Ich Idiot. Danke für die heads up tho :) –

Verwandte Themen