Para sair do seu aplicativo, você pode ligar
System.Windows.Application.Current.Shutdown();
Conforme descrito na documentação do Application.Shutdown
método, você também pode modificar o comportamento de desligamento do seu aplicativo especificando um ShutdownMode :
O desligamento é chamado implicitamente pelo Windows Presentation Foundation (WPF) nas seguintes situações:
- Quando ShutdownMode está definido como OnLastWindowClose.
- Quando o ShutdownMode estiver definido como OnMainWindowClose.
- Quando um usuário encerra uma sessão e o evento SessionEnding é não tratado ou tratado sem cancelamento.
Observe também que Application.Current.Shutdown();
só pode ser chamado a partir do thread que criou o Application
objeto, ou seja, normalmente o thread principal.
Application.Current.Shutdown();
sua função não retornará imediatamente. Você precisa ligarreturn;
também para isso.Application
NÃO é uma classe estática. Ter umApplication.Current
membro estático não significa que é estático. Em vez disso, é uma classe normal que pode ser derivada.Se você realmente precisar encerrar, também poderá usar Environment.Exit () , mas não é nada gracioso (mais como encerrar o processo).
Use-o da seguinte maneira:
fonte
Environment.Exit()
precisa de pelo menos um parâmetro, um código de saída. UseEnvironment.Exit(0)
se você não estiver preocupado com o código de saída.Application.Current.Shutdown();
Application.Current.Shutdown();
meuClosing
evento foi chamado, quando eu simplesmente queria desligar meu aplicativo imediatamente. EntãoEnvironment.Exit(0);
foi a melhor escolha.Como o wuminqi disse ,
Application.Current.Shutdown();
é irreversível e acredito que é normalmente usado para forçar o fechamento de um aplicativo em momentos como quando um usuário está efetuando logoff ou desligando o Windows.Em vez disso, ligue
this.close()
na sua janela principal. É o mesmo que pressionar Alt+ F4ou fechar o botão [x] na janela. Isso fará com que todas as outras janelas de propriedade sejam fechadas e acabará chamandoApplication.Current.Shutdown();
desde que a ação de fechamento não tenha sido cancelada. Consulte a documentação do MSDN em Fechando uma janela .Além disso, como
this.close()
é cancelável, você pode colocar uma caixa de diálogo de confirmação para salvar alterações no manipulador de eventos de fechamento. Basta criar um manipulador de eventos<Window Closing="...">
e alterar dee.Cancel
acordo. (Consulte a documentação do MSDN para obter mais detalhes sobre como fazer isso.)fonte
Use qualquer um dos seguintes, conforme necessário:
1
2)
Acima de todos os métodos, a chamada
closing event
deWindow
classe e a execução podem parar em algum momento (porque geralmente os aplicativos colocam diálogos como 'você tem certeza?' Ou ' Deseja salvar dados antes de fechar? ', Antes que uma janela seja fechada completamente)3. Mas se você deseja finalizar o aplicativo sem nenhum aviso imediato. Use abaixo
fonte
Isso deve fazer o truque:
Se você estiver interessado, aqui está um material adicional que eu achei útil:
Detalhes sobre Application.Current
Ciclo de Vida do Aplicativo WPF
fonte
Aqui está como eu faço o meu:
Eu só peço a
Application.Current.ShutDown()
partir da janela principal do aplicativo, todas as outras janelas usamthis.Close()
. Na minha janela principal,Window_Closing(...)
lida com ox
botão superior direito . Se algum dos métodos solicitar a janela mais próxima,Window_Closing(...)
agarre o evento para desligar se o usuário confirmar.O motivo pelo qual realmente uso
Application.Current.Shutdown()
na minha janela principal é que notei que se um erro de design fosse cometido e eu não declarasse um pai de uma das minhas janelas em um aplicativo, se essa janela fosse aberta sem ser exibida antes até o último fechamento da janela ativa, fiquei com uma janela oculta em execução em segundo plano. O aplicativo não será desligado. A única maneira de impedir o vazamento completo de memória é entrar no Gerenciador de tarefas para desligar o aplicativo.Application.Current.Shutdown()
me protege de falhas de design não intencionais.Isso é da minha experiência pessoal. No final, use o que é melhor para o seu cenário. Esta é apenas mais uma informação.
fonte
Não deve haver uma mensagem
Application.ShutDown();
ou.Exit()
.Application
é uma classe estática. Não se refere ao aplicativo atual. Você precisa acessar o aplicativo atual e desligá-lo assim:fonte
Outra maneira de fazer isso:
Isso forçará a matar seu aplicativo. Sempre funciona, mesmo em um aplicativo multiencadeado.
Nota: Apenas tome cuidado para não perder dados não salvos em outro encadeamento.
fonte
fonte
Tentar
Para mim
não funcionou.
fonte
Segundo o meu entendimento,
Application.Current.Shutdown()
também tem sua desvantagem.Se você deseja mostrar uma janela de confirmação para permitir que os usuários confirmem ao sair ou não,
Application.Current.Shutdown()
é irreversível.fonte
Application.Current.Shutdown()
entanto, podemos obter confirmação do usuário antes de ligar .Resumindo, existem algumas maneiras de fazer isso.
1) Matando o processo, que pula a finalização, tratamento de erros, etc .:
2) Desligando o aplicativo atual, que provavelmente é a maneira correta, porque chama os eventos de saída:
ou
(quando agrupado em uma instância da classe App)
3) Fechando o aplicativo atual (todos os formulários precisam ser fechados / finalizados anteriormente):
(quando agrupado em uma instância da classe App)
4) Saindo do ambiente, que finaliza o aplicativo:
Além disso, você pode querer ler sobre estatutos de saída aqui
fonte
Caliburn micro sabor
fonte
Se você deseja sair de outro encadeamento que não criou o objeto de aplicativo, use:
fonte
Application.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;
fonte
No código xaml, você pode chamar um SystemCommand predefinido:
Eu acho que essa deve ser a maneira preferida ...
fonte