Prozess-Fenster mit Abbrechen-Button

01/10/2007 - 17:10 von Daniel L. | Report spam
Hallo zusammen,

in meiner Applikation gibt es einige Prozess-Fenster (Prozess-Balken)
mit der Möglichkeit des Abbrechens über eine entsprechende Schaltflàche.
Zur Aktualisierung der Anzeige habe ich bisher den Befehl
"Application.DoEvents()" verwendet. Nun habe ich gelesen, dass es unter
Umstànden zu Problemen i.V. mit diesem Kommando kommen kann und man es
nach Möglichkeit vermeiden sollte.
Ich habe dann den DoEvents-Befehl durch ein Refresh des Fensters
ersetzt. Dies aktualisiert die Anzeige, allerdings reagiert das Fenster
nicht mehr auf den Klick auf die Abbrechen-Schaltflàche.
Probehalbe habe ich anschließend die BackgroundWorker-Klasse
implementiert, aber auch hier ist die Anwendung ausgelastet und reagiert
nicht auf den Abbrechen-Button.

Wie löse ich nun das Problem? Gibt es evtl. eine Möglichkeit, eine Art
"DoEvents" für ein bestimmtes Control durchzuführen?

Danke im voraus.

Gruß
Daniel L.
 

Lesen sie die antworten

#1 Frank Dzaebel
01/10/2007 - 19:31 | Warnen spam
Hallo Daniel,

in meiner Applikation gibt es einige Prozess-Fenster (Prozess-Balken) mit
der Möglichkeit des Abbrechens über eine entsprechende Schaltflàche.
Zur Aktualisierung der Anzeige habe ich bisher den Befehl
"Application.DoEvents()" verwendet. Nun habe ich gelesen, dass es unter
Umstànden zu Problemen i.V. mit diesem Kommando kommen kann und man es
nach Möglichkeit vermeiden sollte.



DoEvents ist nicht immer verwerflich, das
Szenario ist halt entscheidend.
Ich könnte mir vorstellen, Du meinst anstatt
Prozess -> Progress, also eine ProgressBar.
Da ist der BackgroundWorker dann durchaus
eine mögliche Methode, um die "Responsivness"
der Windows Form sicherzustellen.
Weitere Möglichkeiten:

[Bearbeiten von Steuerelementen aus Threads]
http://dzaebel.net/ControlInvoke.htm


Wie löse ich nun das Problem? Gibt es evtl. eine Möglichkeit, eine Art
"DoEvents" für ein bestimmtes Control durchzuführen?



Normal beginnt die Ausführung einer Standard
MessageLoop für *eine* Anwendung und
dort für den aktuellen Thread bei Application.Run(Form)
wodurch dann auch das angegebene Formular angezeigt wird.
Du musst eigentlich nur gewàhrleisten, dass Steuerelemente nur
in diesem Thread geàndert werden.

In meinen Links im oben angegebenen Artikel findest
Du viele Beispiele für ProgressBar - Anzeige, die
trotzdem die Responsiveness der Applikation
gewàhrleistet. Angefangen bei:

[Sicheres und einfaches Multithreading in Windows Forms]
http://www.microsoft.com/germany/ms...Forms.mspx


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen