Form 'friert ein' - Programm läuft aber weiter

Rappi

Mitglied
Mahlzeit!

Ich schreibe grad ein relativ komplexes Bepunktungsprogramm für Verkaufsmeldungen... sprich auf ein paar klicks hin fängt das Teil an zu rödeln wie wild... Ziemlich lang noch dazu...

Damit der User nich wie blöd da sitzt und nicht weiss wie lang's noch dauert gibts ne lustige Progressbar und ein Log-Window.

Mein Problem ist jetzt, dass nach einiger Zeit, wenn man nebenbei noch was macht, das gesamte Form nicht mehr aktualisiert wird.
Sprich meine Progressbar wander nicht mehr (trotzt Refresh()), mein Log-Fenster Logt nicht mehr (trotz Refresh())...
Sobald das Ding aber durchgelaufen ist, kann man schon sehen dass er alles so gemacht hat wie gewünscht. (Logs wurden geschrieben, die ProgressBar ist gewandert).. Er hört nur irgendwann auf das gesamte Form neu zu zeichnen...

Gibts da nen Trick den dazu zu zwingen das ständig zu aktualisieren?
Die schönste ProgressBar bringt nix wenn Windows se nich ordentlich darstellt/aktualisiert.

Danke

Jörg
 
Das Stichwort heisst "Threading". Sieh Dir dazu mal diesen Artikel an (hat 2 Seiten). Damit kannst Du prozessorlastingen Code in einen eigenen Thread auslagern, so dass das Fenster trotzdem neu gezeichnet wird. Sollte man im übrigen immer machen, wenn die CPU länger rechnen wird. ;)
 
huhu.. ich bins nochmal...

Das mit den einzelnen Threads klappt super...

mein Problem ist jetzt allerdings, dass der neu erzeugte Thread bei seiner Arbeit einen DataTable füllt, welcher ein DataBinding zu einem DataGrid hat, welches Teil des MainForms ist.

Nun bekomme ich während der Laufzeit des neuen Threads eine System.NullReferenzException, weil sich die beiden Threads wohl ins Gehege kommen.

Liege ich mit meiner Vermutung richtig?
Gibts da eine Möglichkeit was zu Synchronisieren oder so?

Grüßle

Jörg
 
Hallo.

Du kannst von einem Thread bestimmte Objekte sperren lassen, sodass nur der Thread der es sperrte es verwenden kann. (Und natürlich kannst du es wieder freigeben).
Und dann gibt es noch den Monitor mit dem du Threads kontrolliren kannst.

Lock-Statement
Monitor-Class

Mfg,
Alex
 
Zurück