Autor Beitrag
C#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: So 09.10.11 20:48 
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:
ausblenden 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()
        {

            //Now the loop starts which control the Froms
            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(); //hier sollte eigentlich schluss sein
        }

    }


//Edit:
Ich hab ne Lösung gefunden. Sry für den unnötigen Post. Wen es interresiert: Environment.Exit(Environment.ExitCode)

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
storestore
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 397
Erhaltene Danke: 7

WIN 7
C#
BeitragVerfasst: So 09.10.11 22:36 
Ein einfache Close(); genügt ohne Applikation oder So.
MfG storestore

_________________
Der Pc ist nur so schlau, wie derjenige der in steuert!
"Don't Quit. Suffer now, and live the rest of your life as a champion"
C# Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 561
Erhaltene Danke: 65

Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
BeitragVerfasst: 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.

_________________
Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
ujr
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 102
Erhaltene Danke: 12



BeitragVerfasst: Di 11.10.11 09:14 
Hallo,

user profile iconC# hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4806
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: 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 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
ausblenden C#-Quelltext
1:
Application.Run();					

(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.