Riavviare un’applicazione WPF
Da documentazione trovata su MSDN, nel buon vecchio Windows Forms era possibile riavviare l’applicazione con una sola linea di codice. Era infatti possibile invocare il metodo Restart() della classe System.Windows.Forms.Application ed il gioco era fatto.
Con WPF le cose sono un pochino cambiate, ma solo un pochino.
Dunque: innanzitutto la classe Application per le applicazioni WPF e la classe Application per le applicazioni Windows Forms sono classi differenti. Perciò occhio: se parliamo di WPF, la classe Application sta nel namespace System.Windows.
Questa classe espone una proprietà statica Current, tramite la quale è possibile accedere all’applicazione corrente all’interno dell’AppDomain. A questo punto è possibile invocare il metodo Shutdown(), che chiude l’applicazione. Come è possibile riavviarla? La cosa più semplice che ho trovato è intercettare l’evento Exit dell’applicazione e riavviarla. Quindi, supponiamo di aver messo un Button su una Windows e di voler chiudere e riavviare l’applicazione sul Click di questo bottone. Il codice sarà :
1: private void LanguageButton_Click(object sender, System.Windows.RoutedEventArgs e)
2: {
3: Application.Current.Exit += delegate(object s, ExitEventArgs args)
4: {
5: System.Diagnostics.Process.Start(Application.ResourceAssembly.Location);
6: };
7:
8: Application.Current.Shutdown();
9: }
Molto semplice, direi. L’unica osservazione da fare è quella di sottoscrivere l’evento Exit solo quando necessario. In questo modo, potete chiudere l’applicazione come al solito (ALT+F4, cliccando sulla X in alto a destra) e l’applicazione non riparte: riparte solo quando si va a cliccare su quel Button particolare.