BackGroundWorker und Form!

17/10/2007 - 23:38 von leslie eldrige | Report spam
Hallo Zusammen,

Ich habe eine Anwendung bei der BGW ein paar Minuten braucht. Ich ging davon
aus, dass der User in der Hauptform problemlos weiter arbeiten kann (ausser
den gleichen Thred nochmals starten), jedoch ist das scheinbar nicht so!!!

Wenn immer ich wàhrend des Threadlaufens versuche ein Control zu betàtigen
(z.B. CheckBox), geht das nicht! Die bleibt solange BGW làuft einfach
gesperrt!

Ich verwende im BGW - ProgressChanged die Refresh Funktion für alle Labels
und Progressbar, man sieht schon dass BGW arbeitet, jedoch sperrt er
scheinbar alle andere Controls auf der Form, die erst nach der Beendigung des
BGW wieder zur Verfügung stehen!

Was kann man dagegen machen? Wie soll es gehen im Falle, dass der User den
BGW selber abbrechen will?

Für einen Hinweis vielen Dank im Voraus.

les
 

Lesen sie die antworten

#1 Thomas Scheidegger
17/10/2007 - 23:53 | Warnen spam
Hallo Leslie

...Anwendung bei der BGW ein paar Minuten braucht. Ich ging davon
aus, dass der User in der Hauptform problemlos weiter arbeiten kann



doch, stimmt im Prinzip.


Wenn immer ich wàhrend des Threadlaufens versuche ein Control zu


betàtigen
(z.B. CheckBox), geht das nicht! Die bleibt solange BGW làuft einfach


gesperrt!


neben banalen Code/Logik-Fehlern sind u.a. folgende technische Ursachen
hàufig:
- der BGW löst viel zuviele (zu hàufig) Progress/Invoke usw. aus und
überflutet so den GUI-Thread (bzw Msg-Pump).
(=> Update-Logik umbauen auf 'Bulk').
- BGW generiert totale CPU Last (->ggf BGW Thread-Prioritàt senken).
- Thread-COM-Apartment Regeln missachtet (typ. wàre BGW konsequent MTA).
- der GUI-Thread 'wartet' sinnfrei (zB blockierend) auf BGW-Thread Ende
(Join, DoEvents oà Hacks).




Thomas Scheidegger - 'NETMaster'
http://www.cetus-links.org/oo_dotnet.html - http://dnetmaster.net/

Ähnliche fragen