Fehler in der Fensterbehandlung von WPF
Gerade habe ich einen kleinen Fehler in WPF entdeckt. Scheinbar ist es so, dass Fensterinstanzen bei der Instanziierung schon zur WindowCollection hinzugefügt werden und nicht erst wenn Sie geöffnet werden. Dadurch muss man Sie erst entfernen, bevor man das Programm beenden kann, da es ansonsten denkt, dass noch ein Fenster offen ist.
Entdeckt habe ich das ganze bei einem Projekt in dem ich eine neue Instanz eines Fensters erstellt habe, ohne es zu öffnen (über die Gründe will ich jetzt mal nichts sagen – ich weiß, dass das an sich ne blöde Idee ist…). Nachdem ich das Programm gestartet habe, konnte ich zwar alle Fenster schließen, aber der Prozess lief immer weiter.
Nach etwas debuggen habe ich dann herausgefunden, dass immer noch eine Referenz zum Fenster vorhanden ist, obwohl dieses gar nicht mehr existiert. Dadurch kann das Programm natürlich nicht beendet werden, da es denkt, das noch irgendwo ein Fenster offen ist.
Die Referenz zum Fenster in der WindowCollection der Anwendung wird scheinbar dann entfernt, wenn Window.Close() aufgerufen wird.
Ein sehr interessantes Phänomen, auf das man erst mal kommen muss…
Update:
Nachdem ich dafür einen Bug bei Microsoft Connect erstellt habe, kam nun die Antwort, dass das Verhalten “bei Design” ist. Komisch, ist aber so…
Zitat:
This behavior is probably by design. Application has a property called “ShutdownMode” that has a default value of OnLastWindowClose. Creating a window is sufficient to register it for keeping the application alive, even if it is never shown.
Depending on your scenario another value for ShutdownMode may be appropriate.
Hope that helps,

