Aby wyjść z aplikacji, możesz zadzwonić
System.Windows.Application.Current.Shutdown();
Jak opisano w dokumentacji Application.Shutdown
metody, można również zmodyfikować zachowanie podczas zamykania aplikacji, określając tryb ShutdownMode :
Shutdown jest domyślnie wywoływany przez Windows Presentation Foundation (WPF) w następujących sytuacjach:
- Gdy ShutdownMode jest ustawiony na OnLastWindowClose.
- Gdy ShutdownMode jest ustawiony na OnMainWindowClose.
- Gdy użytkownik zakończy sesję, a zdarzenie SessionEnding jest albo nieobsługiwane, albo obsługiwane bez anulowania.
Należy również pamiętać, że Application.Current.Shutdown();
można go wywoływać tylko z wątku, który utworzył Application
obiekt, tj. Zwykle z głównego wątku.
Application.Current.Shutdown();
fonction nie wróci natychmiast. Musiszreturn;
również do tego zadzwonić .Application
NIE jest klasą statyczną. Posiadanie elementuApplication.Current
statycznego nie oznacza, że jest on statyczny. Zamiast tego można wyprowadzić normalną klasę.Jeśli naprawdę potrzebujesz go zamknąć, możesz także użyć Environment.Exit () , ale wcale nie jest to taktowne (bardziej przypomina zakończenie procesu).
Użyj go w następujący sposób:
źródło
Environment.Exit()
wymaga co najmniej jednego parametru, kodu wyjścia. Użyj,Environment.Exit(0)
jeśli nie martwi Cię kod wyjścia.Application.Current.Shutdown();
Application.Current.Shutdown();
moimClosing
wydarzeniem został wywołany, kiedy po prostu chciałem natychmiast wyłączyć aplikację. WięcEnvironment.Exit(0);
był lepszy wybór.Jak powiedział wuminqi ,
Application.Current.Shutdown();
jest nieodwracalny i uważam, że zwykle służy do wymuszenia zamknięcia aplikacji w momentach, na przykład gdy użytkownik wylogowuje się lub zamyka system Windows.Zamiast tego zadzwoń
this.close()
w głównym oknie. Jest to to samo, co naciśnięcie przycisku Alt+ F4lub zamknięcie przycisku [x] w oknie. Spowoduje to zamknięcie wszystkich innych posiadanych okien i zakończy połączenieApplication.Current.Shutdown();
, dopóki akcja zamknięcia nie zostanie anulowana. Zobacz dokumentację MSDN na temat zamykania okna .Ponadto, ponieważ
this.close()
można ją anulować, można w oknie dialogowym obsługi zdarzenia zamykającego umieścić okno dialogowe potwierdzenia zapisania zmian. Po prostu utwórz moduł obsługi zdarzeń<Window Closing="...">
ie.Cancel
odpowiednio go zmień . ( Więcej informacji na ten temat można znaleźć w dokumentacji MSDN ).źródło
W razie potrzeby skorzystaj z jednego z poniższych:
1.
2)
Przede wszystkim metody zadzwoni
closing event
zWindow
klasą i wykonanie może zatrzymać w pewnym momencie (zwykle przyczyną aplikacji umieścić dialogi jak „Czy jesteś pewien?” Lub „ Czy chciałbyś, aby zapisać dane przed zamknięciem? ”, Zanim okno jest całkowicie zamknięta)3. Ale jeśli chcesz natychmiast zakończyć aplikację bez żadnego ostrzeżenia . Użyj poniżej
źródło
To powinno załatwić sprawę:
Jeśli jesteś zainteresowany, oto kilka dodatkowych materiałów, które uznałem za pomocne:
Szczegóły dotyczące Application.Current
Cykl życia aplikacji WPF
źródło
Oto jak robię moje:
Dzwonię tylko
Application.Current.ShutDown()
z głównego okna aplikacji, wszystkie inne okna używająthis.Close()
. W moim głównym oknieWindow_Closing(...)
obsługuje prawy górnyx
przycisk. Jeśli którakolwiek z metod wymaga okna bliżej,Window_Closing(...)
pobiera zdarzenie w celu zamknięcia, jeśli użytkownik potwierdzi.Powodem, dla którego faktycznie używam
Application.Current.Shutdown()
w moim oknie głównym jest to, że zauważyłem, że jeśli popełniłem błąd projektowy i nie zadeklarowałem elementu nadrzędnego jednego z moich okien w aplikacji, jeśli okno to zostanie otwarte bez uprzedniego wyświetlenia do ostatniego aktywnego zamknięcia okna, pozostało mi ukryte okno działające w tle. Aplikacja nie zostanie zamknięta. Jedynym sposobem, aby zapobiec całkowitemu wyciekowi pamięci, jest przejście do Menedżera zadań w celu zamknięcia aplikacji.Application.Current.Shutdown()
chroni mnie przed niezamierzonymi wadami projektowymi.To z mojego osobistego doświadczenia. Na koniec użyj tego, co najlepiej pasuje do Twojego scenariusza. To tylko kolejna informacja.
źródło
Nie powinno być wiadomości
Application.ShutDown();
ani.Exit()
wiadomości.Application
jest klasą statyczną. Nie dotyczy bieżącej aplikacji. Musisz przejść do bieżącej aplikacji, a następnie zamknąć ją w następujący sposób:źródło
Innym sposobem na to jest:
Wymusi to zabicie twojej aplikacji. Zawsze działa, nawet w aplikacjach wielowątkowych.
Uwaga: Uważaj, aby nie utracić niezapisanych danych w innym wątku.
źródło
źródło
Próbować
Dla mnie
nie działało
źródło
Według mojego rozumienia
Application.Current.Shutdown()
ma również swoją wadę.Jeśli chcesz wyświetlić okno potwierdzenia, aby użytkownicy mogli potwierdzić przy wyjściu lub nie,
Application.Current.Shutdown()
jest nieodwracalne.źródło
Application.Current.Shutdown()
.Podsumowując, jest na to kilka sposobów.
1) Zabicie procesu, który pomija finalizację, obsługę błędów itp .:
2) Zamykanie bieżącej aplikacji, co jest prawdopodobnie właściwym sposobem, ponieważ wywołuje zdarzenia wyjścia:
lub
(gdy jest sklonowany w instancji klasy aplikacji)
3) Zamykanie bieżącej aplikacji (wszystkie formularze muszą zostać zamknięte / zakończone wcześniej):
(gdy jest sklonowany w instancji klasy aplikacji)
4) Wyjście ze środowiska, które kończy działanie aplikacji:
Możesz także przeczytać tutaj o statusach wyjścia
źródło
Caliburn o smaku mikro
źródło
Jeśli chcesz wyjść z innego wątku, który nie utworzył obiektu aplikacji, użyj:
źródło
Application.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;
źródło
Z kodu xaml można wywołać predefiniowane polecenie systemowe:
Myślę, że powinien to być preferowany sposób ...
źródło