Entwickler-Ecke
WinForms - Sauberes Ausblenden von MessageBox
chip777 - Fr 23.04.10 13:37
Titel: Sauberes Ausblenden von MessageBox
Hi,
in meinem Programm habe ich einige Dinge die sehr lange laden, deshalb habe ich eine MessageBox eingebaut, welche darauf hinweist. Allerdings ist es dann so das nach dem Klick auf OK zwar der Vorgang startet, allerdings die MessageBox nicht richtig verschwindet, dass heißt diese ist noch solange sichtbar bis der Vorgang abgeschlossen ist.
Wie kann ich das verhindern?
Martin
Ralf Jansen - Fr 23.04.10 14:22
Du musst dem System zwischen ausblenden der MessageBox und starten des Vorgangs (wenn es ein Vorgang ist der im GUI Thread läuft) einmal die Chance geben sich neu zu zeichnen bzw. einmal die Abarbeitung der Events zum neuzeichnen zulassen. Das geht z.B. mit einem einmaligen Aufruf von Application.DoEvents() direkt nach deinem MessageBox.Show().
danielf - Fr 23.04.10 14:30
Du kannst aber auch die rechen intensive Methode in einen Thread auslagern. Dann könntest du auch einen Fortschrittbalken etc. anzeigen.
chip777 - Fr 23.04.10 14:55
Super,
Application.DoEvents() erfüllt den Zweck. Das mit dem extra Thread und der ProgressBar wäre natürlich um einiges besser, allerdings weiß ich nicht ob ich das hinbekomme. Die Funktion die solange braucht ist in einer Methode untergebracht, kann ich die relativ einfach in einen extra Thread packen und mit einer Progress Bar verknüpfen?
Ich hab schonmal versucht etwas mit einer ProgressBar zu machen, aber das hat nicht geklappt, weil die Apllication immer "gestanden" hat, weil ich den Application.DoEvents() Befehl noch nicht kannte.
danielf - Fr 23.04.10 16:06
Du kannst einfach einen
BackgroundWorker [
http://msdn.microsoft.com/de-de/library/system.componentmodel.backgroundworker.aspx] verwenden. Dem weißt du ein EventHandler zu (DoWork) und dann macht er die Methode im Hintergrund. Wenn du eine ProgressBar dazu haben willst, musst du halt in deiner rechenintensiven Methode Events werfen, die dan aktuellen Bearbeitungsstand anzeigen. Aber fürs erste würde ich mal den BackgroundWork einsetzen.
PS: Pass aber auf, dass der Benutzer dann weiterhin eingaben machen kann und ggf. den Prozess nochmal starten und es dann zu Problemen kommen kann.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!