Laden...

Backgroundworker: Schleife und ArgumentOutOfRangeException

Erstellt von Binärathlet vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.392 Views
B
Binärathlet Themenstarter:in
26 Beiträge seit 2010
vor 13 Jahren
Backgroundworker: Schleife und ArgumentOutOfRangeException

Hallo zusammen,

ich habe ein ziemlich fragwürdiges Problem.
Ich habe einen BackgroundWorker, der eine Liste von Objekten durchläuft und auf diesen Objekten Methoden ausführt.
Wenn ich nun die in der angehängten Grafik dargestellte Schleife durchdebugge, ist alles in Ordnung. Entferne ich allerdings den Debug-Punkt beendet die Schleife nicht und ich laufe in die dargestellte Ausnahme.
Ich habe es ebenso mit foreach probiert, das hat wiederum dazu geführt, dass beim Debuggen alles in Ordnung war, ohne den Debugpunkt wurde zweimal die Methode auf dem ersten Objekt ausgeführt ...

Ich hoffe, ihr findet eine Erklärung dazu!?

1.044 Beiträge seit 2008
vor 13 Jahren
Gelöschter Account
vor 13 Jahren

Danke für das Beispiel. Ich habe schon länger nach einem Beispiel für den programmierfehler "access to modified closure" gesucht 😃

Die Behebung ist relativ einfach. Kopiere "i" in eine variable aus dem inner Scope oder noch besser.. übergebe sie der aufgerufenen Methode.

@zero_x:
wie kommst du auf das?

6.911 Beiträge seit 2009
vor 13 Jahren

Hallo,

die Fehlermeldung ist eindeutig und schau dir die Werte im Fenster "Überwachen 1" an -> da siehst du den Grund und Jack hat oben die Hintergründe geliefert.

Was ist denn das für eine Mega-Klasse mit 1900 Zeilen Code?

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

1.044 Beiträge seit 2008
vor 13 Jahren

Hallo JAck30lena,

meinst du sowas?

zero_x

B
Binärathlet Themenstarter:in
26 Beiträge seit 2010
vor 13 Jahren

Hallo zero_x,

tatsächlich, 'BeginInvoke' durch 'Invoke' ersetzt und es läuft tadellos 😁

Also ich muss jetzt schon sagen, das dieses Forum hier echt super ist! Großes Dankeschön und großes Lob an alle, weiter so! 👍 👍

edit:
@JAck30lena: du hast recht, ein Sammelmonolith für Tests auf einem größeren Projekt 😉

Gelöschter Account
vor 13 Jahren

Korrekt.

Durch das BeginInvoke wird die Variable "i" zu einem Zeitpunkt abgerufen und verwendet, in der sie bereits außerhalb des arrays ist.

edit:
@gfoidl: ganz klar ein Monolith. (nichts für ungut 😃 )

B
142 Beiträge seit 2007
vor 13 Jahren

Hallo,
Was ist denn das für eine Mega-Klasse mit 1900 Zeilen Code?

One-File-Project 😉

Solche Probleme hab ich auch ab und an. Ich versuche es dann mit Debug-Ausgaben und schaue nach ob sie in der erwarteten Reihenfolge kommen. Gibt vielleicht schönere Methoden, ist aber einfach 😉

731 Beiträge seit 2006
vor 13 Jahren

So traurig es auch ist, wir haben hier in der Firma ein altes Projekt übernommen und in diesem Projekt gibt es eine Klasse mit ca. 8.000 Zeilen. So wer bietet mehr? 8.000 zum ersten... 😃

Gelöschter Account
vor 13 Jahren

Ich hatte in einem Projekt eine Klasse mit über 500k Zeilen. Damit habe ich dann wohl auch schon gewonnen und damit ist dieses Thema auch schon bitte begraben, weil es nicht zum Topic passt. siehe: Coding Styles Horror