In un’ applicazione WPF, per default la classe Application mantiene viva l’applicazione stessa finché almeno una finestra è ancora aperta. Se si vuole cambiare questo comportamento, è possibile utilizzare la proprietà Application.ShutdownMode direttamente dal markup XAML:
( ATTENZIONE: se si istanzia l’oggetto Application a mano, è obbligatorio impostare la proprietà ShutdownMode prima di invocare il metodo Run() )
I valori ammissibili per tale proprietà sono:
- OnLastWindowClose (default): l’applicazione WPF rimane in vita fintantoché esiste almeno una Window attiva. Se si chiude la MainWindow, la proprietà Application.MainWindow continua a puntare alla MainWindow chiusa. In questo tipo di situazione, si può quindi scegliere di ri-assegnare da codice la proprietà MainWindow in modo tale che essa punti ad una Window differente.
- OnMainWindowClose: l’applicazione WPF rimane viva fintantoché la MainWindow è aperta.
- OnExplicitShutdown: L’applicazione WPF rimane viva fintantoché non viene chiamato esplicitamente il metodo Application.Shutdown(), anche se tutte le Window sono chiuse. E’ chiaro che questo approccio ha senso nel caso in cui occorra gestire una logica complessa per stabilire se e quando la nostra applicazione debba chiudersi.
Un paio di note:
- Indipendentemente dal meccanismo di shutdown scelto, il metodo Application.Shutdown() è sempre valido per iniziare il processo di terminazione dell’applicazione: dietro le quinte, infatti, il metodo Application.Shutdown() non fa altro che scatenare l’uscita dal metodo Application.Run(), il che (occhio!) non preserva dall’esecuzione di eventuale codice aggiuntivo nel Main() o nel gestore dell’evento Application.Exit.
- Quando ShutdownMode=”OnMainWindowClose” e viene chiusa la MainWindow, l’oggetto Application chiude automaticamente tutte le altre finestre prima che il contesto di esecuzione esca dal metodo Run(), analogamente a quanto avviene invocando il metodo Application.Shutdown().
Technorati Tag:
WPF,
Shutdown