Entwickler-Ecke
WinForms - Forms-Application schließt nicht
C# - So 09.10.11 20:48
Titel: Forms-Application schließt nicht
Hallo,
vorweg: ich hätte einen passenderen Titel gewählt, aber der ist zu lang xD.
Also ich hab eine Forms-Application erstellt. Diese läuft auch wunderbar. Doch wenn ich
Application.Exit() aufrufe, schließen sich alle Fenster, doch die Anwendung ist weiterhin aktiv. Ich habe keine MainForm sondern einen
ApplicationContext, der die anderen Forms steuern soll.
Das ist der Code des ApplicationContexts:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| class _Forms : ApplicationContext { public static string CurrentUser { get; set; } public static string CurrentPw { get; set; }
public _Forms() {
while (true) { LogIn loginForm = new LogIn(); MainForm mainForm = new MainForm(); DialogResult res = loginForm.ShowDialog(); if (res != DialogResult.OK) break; mainForm.user = CurrentUser; mainForm.password = CurrentPw; res = mainForm.ShowDialog(); if (res == DialogResult.Retry) continue; if (res == DialogResult.Cancel) break; } Application.Exit(); }
} |
//Edit:
Ich hab ne Lösung gefunden. Sry für den unnötigen Post. Wen es interresiert:
Environment.Exit(Environment.ExitCode)
storestore - So 09.10.11 22:36
Ein einfache Close(); genügt ohne Applikation oder So.
MfG storestore
C# - Mo 10.10.11 19:41
eben nicht. Erstell mal ein Projekt mit einem "ApplicationContext" als Hauptform. Und dann probier mal die mit Close() zu schließen. Dann siehst du was ich mein.
ujr - Di 11.10.11 09:14
Hallo,
C# hat folgendes geschrieben : |
C#-Quelltext 1:
| Environment.Exit(Environment.ExitCode) | |
ist die ganz harte Variante.
Das Problem in Deinem Fall ist, dass Du Application.Exit aus dem Konstruktor aufrufst. Wie sich überhaupt alles im Konstruktor abspielt.
Application.Exit beendet die Nachrichtenverarbeitung - allerdings läuft die im Konstruktor noch gar nicht, sodass der Aufruf wirkungslos bleibt. Nach dem Konstruktor wird die Nachrichtenschleife aber gestartet, sodass Dein Programm sich nicht mehr beendet.
Irgendwie finde ich das Design der Anwendung mit den Fenstern im Konstruktor nicht ganz optimal. Dass es Probleme gibt siehst Du ja hier. Vielleicht sollte man besser mit Show und den FormClosed-Ereignissen arbeiten. Eine Lösung mit der bisherigen Variante wäre der Einsatz eines System.Windows.Forms.Timer's statt Application.Exit, der dann im Tick-Ereignis Application.Exit aufruft.
Th69 - Di 11.10.11 10:58
Hallo C#,
dein Programmdesign ist außerst konfus. Du hast anscheinend die ApplicationContext-Klasse überhaupt nicht verstanden (trotz des gut gemeinten Ratschlags von Ralf Jansen in dem anderen Beitrag von dir
Form2.Show() funktioniert nicht [
http://www.c-sharp-forum.de/viewtopic.php?t=107299] solltest du besser bei der einfachen Standardvariante bleiben).
Bisher 'funktioniert' dein Code auch nur wegen den ShowDialog()-Aufrufen, da diese eine eigene MessageLoop verwenden (d.h. es ist völlig egal, ob du eine ApplicationContext oder sonst eine andere Klasse verwendest).
Eine andere Alternative wäre der Aufruf der
(d.h. ohne Angabe eines Formulars).
Dann müßtest du nur Application.Exit() an der richtigen Stelle aufrufen (d.h. beim Close() des Hauptformulars).
Jedoch empfehle ich dir dringend (bei deinen jetzigen Kenntnissen) es so zu machen, wie ich es in dem anderen Beitrag vorgeschlagen habe.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!