Desligar uma aplicação WPF de App.xaml.cs
-
03-07-2019 - |
Pergunta
Atualmente, estou escrevendo um aplicativo WPF que faz a manipulação argumento de linha de comando no App.xaml.cs (que é necessário porque o evento Startup parece ser a maneira recomendada de obter a esses argumentos). Com base nos argumentos que quero sair do programa a já nesse ponto que, tanto quanto eu sei, deve ser feito em WPF com Application.Current.Shutdown()
ou neste caso (como eu estou no objeto do aplicativo atual) provavelmente também só this.Shutdown()
.
O único problema é que este não parece certo trabalho. Eu já atravessou com o depurador e código após a linha Shutdown()
ainda é executado o que leva a erros depois no método, desde que eu esperava que o aplicativo não viver por muito tempo. Além disso, a janela principal (declarado no atributo StartupUri em XAML) ainda é carregado.
Eu verifiquei a documentação desse método e não encontrou nada nas observações que me dizem que eu não deveria usá-lo durante Application.Startup
ou Application
em tudo.
Então, o que é o caminho certo para sair do programa naquele ponto, i. e. o manipulador de eventos Startup
em um objeto Application
?
Solução
Em primeiro lugar remover a propriedade StartupUri de App.xaml e, em seguida, use o seguinte:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
bool doShutDown = ...;
if (doShutDown)
{
Shutdown(1);
return;
}
else
{
this.StartupUri = new Uri("Window1.xaml", UriKind.Relative);
}
}
Outras dicas
Se você remover o StartupUri de app.xaml para uma aplicação com uma MainWindow você precisa ter certeza de que você faça a seguinte chamada em seu método OnStartup caso contrário a aplicação não irá terminar quando seus fecha mainwindow.
this.ShutdownMode = System.Windows.ShutdownMode.OnMainWindowClose;
@Frank Schwieterman, algo ao longo destas linhas podem ajudá-lo com seu problema janela de console.