Application.current.shutdown () nicht
-
18-09-2019 - |
Frage
Der Titel ist darüber. WPF -App mit einigen WCF -Zügen für IPC. Ich rufe Application.Current.Shutdown()
Und die App geht glücklich weiter. ich dachte Shutdown
sollte nicht mehr aufzuhalten sein.
Vielleicht, weil es aus einem Hintergrund -Thread genannt wird? Muss ich einen Dispatcher fummeln?
Lösung
Sie erhalten eine Ausnahme, wenn ich anrufe Application.Current.Shutdown
In einem anderen Thread als dem Hauptfaden würde ich Ihnen also annehmen, wo es bereits richtig "Dispatchfledering" verwendet.
Auf jeden Fall kompiliert und beendet dies eine Anwendung. Wenn der Dispatcher -Bit nicht so aussieht, wie Sie es haben, können Sie sie in den Griff haben:
ThreadStart ts = delegate()
{
Dispatcher.BeginInvoke((Action)delegate()
{
Application.Current.Shutdown();
});
};
Thread t = new Thread(ts);
t.Start();
Andere Tipps
Nach meiner Erfahrung müssen alle Themen entweder explizit beendet oder als Hintergrund -Threads gekennzeichnet werden, damit die Anwendung schließt.
Hier ist ein Beispiel dafür, einen Lese -Thread im Hintergrund zu starten:
_readThread = new Thread(new ThreadStart(ReadThread));
_readThread.Name = "Receiver";
_readThread.Priority = ThreadPriority.Highest;
_readThread.IsBackground = true;
_readThread.Start();
Das IsBackground
Eigenschaft ist der Schlüssel. Ohne dass der Thread nicht eingestellt wird, wird der Thread nicht eingeschaltet, wenn Sie das Abschalten aufrufen.
Ich erlebe nur Application.Current.Shutdown
Ich arbeite nicht, wenn ich aus Visual Studio renne. Innerhalb von Visual Studio (zumindest die 2010 -Version, die ich verwende) Application.Current.Shutdown
tut nichts. Wenn ich einen Schritt durchläuft, führt diese Zeile aus und fährt dann fort. Wenn ich das Programm (als .exe) dann von Windows Explorer ausführe Application.Current.Shutdown
funktioniert gut.
Es gibt wahrscheinlich eine Erklärung dafür, da während des Debuggens andere Threads aktiv sind, aber ich kann es nicht erklären.