Application.Startup-Ereignisbeschränkungen (Fehler?)

Es heißt, ich kann verwendenStartup Ereignis für viele Dinge, wie Initialisierung, Erstellen mehrerer Formen, blablabla.

Versuchen Sie jedoch, eine neue WPF-Anwendung zu erstellen und diesen Ereignishandler hinzuzufügen:

    private void App_Startup(object sender, StartupEventArgs e)
    {
        Window window = new Window();
    }

Nach dem Schließen des Hauptfensters bleibt Ihre Anwendung im Speicher hängen. Wenn Sie in diesem Moment die Ausführung in VS anhalten, wird dies hässlichAbsturz Callstack-Fenster mit vielen Aufrufen irgendwo weit weg von meinem Quellcode.

Irgendwelche Gedanken?

P.S .: Ich muss alle meine Fenster zum Zwecke der selbstlernenden Konfiguration einmal instanziieren. Soll ich einen anderen Ort benutzen?

Lassen Sie mich ein besseres Beispiel geben (Beispiel oben ist gut, um das Problem zu reproduzieren, es scheint schwer zu verstehen, was ich tatsächlich tue). ich entferneStartupUri und dann:

    private void App_Startup(object sender, StartupEventArgs e)
    {
        // un-comment this line to reproduce the problem:
        // Window window = new Window();

        // actual implementation will be
        // Window1 window1 = new Window1();
        // Window2 window2 = new Window2();
        // Window3 window3 = new Window3();
        // Window4 window4 = new Window4();
        // ...

        // start main window as usually
        MainWindow mainWindow = new MainWindow();
        mainWindow.Show();
    }

Und warum brauche ich Windows-Instanzen (window1, ..2, ..3, ...)? Weil deren Inhalt überprüft wird, um eine Liste von Steuerelementen zu erstellen, für die ich die Konfiguration speichern möchte. Einige dieser Fenster werdennoch nie Dem Benutzer angezeigt werden (zum Beispiel, wenn er kein Administrator ist), einige davon sind Popups, andere Editoren usw. Ich möchte sie also nicht anzeigen. Bei jedem Anwendungsstart muss jedoch die Konfiguration erstellt und gespeichert werden. Und ich suche jetzt nach einem Ort, an dem ich das tun kann.

Überraschenderweise mit dedizierten VeranstaltungStartup scheint etwas zu habenProbleme mit dem Erstellen mehrerer Fenster aberwird nicht angezeigt Sie. Die Frage ist, warum und wie man es löst.

Ein bisschen mehr testen. Probieren Sie diesen Code aus und erklären Sie mir, warum die Anwendung geschlossen wird, ohne dass dies angezeigt wirdirgendein Fenster?

    private void App_Startup(object sender, StartupEventArgs e)
    {
        Window window = new Window();
        window.Close(); // closing without opening window

        MainWindow mainWindow = new MainWindow();
        mainWindow.Show();
        //mainWindow = new MainWindow(); // can be un-commented, for absolutely no effect
        mainWindow.Show();
        mainWindow.Show();
        mainWindow.Show();
        mainWindow.Show(); // you will not see mainWindow at all, all Show doing nothing
    }

Mehr Fragen. Was mache ich?

Etwas was funktioniert, aber riecht:

    private void App_Startup(object sender, StartupEventArgs e)
    {
        Window window = new Window();

        MainWindow mainWindow = new MainWindow();
        mainWindow.ShowDialog();
        Shutdown();
    }

Beachten Sie, anrufenShowDialog (wodurch die Ereignisbehandlungsroutine darauf wartet, dass das Fenster geschlossen wird) und aufruftShutdown gleich nach.

Es ist immer noch nicht klar, wo das Problem liegtStartup Ereignishandler zum Erstellen von Instanzen einiger Fenster. Irgendwelche Ideen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage