Hintergrund-Worker - meldet den Fortschritt mit dem String-Array

8

Ich muss in jeder Schleife mehrere STRING-Werte von meinem Backgroundworker zurückgeben, daher habe ich versucht, den zweiten Parameter von ReportProgress als String-Array zu verwenden. Beispielcode:

%Vor%

Es kompiliert, aber zur Laufzeit, in dem Moment, in dem ich versuche, auf die zurückgegebene Zeichenfolge von UserState zuzugreifen, erhalte ich einen Fehler: "Objektreferenz wurde nicht auf eine Instanz eines Objekts gesetzt."

Für mich scheint es, als wäre etwas falsch, wenn der Array-Parameter an den ProgressChanged-Delegaten übergeben wird, oder in der ProgressChanged-Methode, wenn man versucht, Array-Werte für die Ergebnisse festzulegen.

    
andree 28.03.2011, 12:48
quelle

3 Antworten

16

Ihr Code-Snippet kann das Problem nicht reproduzieren. Ein Standardfehler besteht darin, ReportProgress () aufzurufen und dann mit dem Ändern des Objekts fortzufahren. Es dauert eine Weile, bis der Event-Handler ausgeführt wird. Es wird das geänderte Objekt und nicht das Original angezeigt. Sie vermeiden dies, indem Sie einfach ein neues Objekt erstellen, so dass der Event-Handler immer mit dem Original arbeitet. So:

%Vor%

Beachten Sie, wie die Array-Erstellungsanweisung innerhalb der Schleife verschoben wird.

    
Hans Passant 28.03.2011, 13:52
quelle
7

Wenn Sie Ihren BackgroundWorker instanziieren, müssen Sie reportprogress auf true setzen:

%Vor%

Für die do-Methode brauchen Sie nur Folgendes:

%Vor%

Dann etwas wie das, um den Fortschritt zu fangen:

%Vor%     
dcarneiro 28.03.2011 12:52
quelle
0

Ich habe ein ähnliches Problem gelöst, indem ich einen neuen ProgressChanged -Ereignis-Listener zum Hintergrund-Worker hinzugefügt habe und die Weitergabe an die nächste Schleife blockiere, wenn ProgressChanged nicht ausgelöst:

%Vor%     
ykjmaster 15.09.2011 22:15
quelle

Tags und Links