Problem mit Application.Exit

Darkas

Erfahrenes Mitglied
Hi!

Ich brauch mal wieder eure Hilfe, ich hab gerade ein ganz seltsames Problem: Meine Anwendung läuft über ein TrayIcon (das tut kommt irgendwo von codeproject, weil das ganze ohne Form läuft, da muss man das ein wenig anders machen), und von da aus kann man dann ein Form öffnen (oder auch mehrere), über ein Kontext Menü. Wenn ich dort auf Beenden klicke, so werden alle Fenster auf null gesetzt, und Application.Exit wird aufgerufen. Wenn ich kein Form geöffnet hatte, so funktioniert das wunderbar. Wenn ich jedoch ein Form auch nur ein mal geöffnet hatte (ich kann es auch wieder geschlossen haben), so wird die Methode aufgerufen, und Application.Exit funktioniert wohl nicht, alle Fenster sind danach null, aber das Programm läuft weiter. Ich find das seehr eigenartig. Hier mal meine Klasse für das TrayIcon (vereinfacht):
Code:
class startIcon
{
    private static readonly startIcon startIco = new startIcon();
    private NotifyIcon launcher = new NotifyIcon();
    private static EngineDesigner ed;
    private static Game_Designer gd;

    public static startIcon getIcon
    {
        get
        {
            return startIco;
        }
    }

    private startIcon()
    {
        launcher.ContextMenuStrip = new ContextMenuStrip();
        launcher.ContextMenuStrip.Items.AddRange(new ToolStripItem[] { 
        new ToolStripMenuItem("Game Editor", null, new EventHandler(openGameEditor)),
        new ToolStripMenuItem("Engine Editor", null, new EventHandler(openEngineEditor)),
        new ToolStripSeparator(),
        new ToolStripMenuItem("Beenden", null, new EventHandler(exit))
                                                     });
        launcher.Icon = global::Moonlight_Games_Creator.Properties.Resources.TrayIco;
        launcher.Text = "Moonlight Games Studio";
        launcher.Visible = true;
    }

    private void openGameEditor(object sender, EventArgs e)
    {
        if (gd == null)
            gd = new Game_Designer();
        gd.Show();
        gd = null;
    }

    private void openEngineEditor(object sender, EventArgs e)
    {
        if (ed == null)
            ed = new Engine_Designer.EngineDesigner();
        ed.Show();
        ed = null;
    }

    private void exit(object sender, EventArgs e)
    {
        this.launcher = null;
        ed = null;
        gd = null;
        Application.Exit();
    }
}
 
Ich hab jetzt herausgefunden, dass wohl ein unterschied zwischen

C#:
Form = null;
und
C#:
Form.Dispose();
existiert, denn damit Funktioniert es.
 
Zuletzt bearbeitet von einem Moderator:
Zurück