c# simple Come si esce da un'applicazione WPF a livello di programmazione?




wpf simple application (13)

Non ci dovrebbe essere un Application.ShutDown(); o. .Exit() messaggio.

Application è una classe statica. Non si riferisce all'applicazione corrente. Devi passare all'applicazione corrente e quindi spegnerla in questo modo:

Application.Current.Shutdown();

Nei pochi anni in cui utilizzo C # (Windows Form), non ho mai utilizzato WPF. Ma ora amo WPF, ma non so come dovrei uscire dalla mia applicazione quando l'utente fa clic sulla voce Esci dal menu File.

Ho provato:

this.Dispose();
this.Exit();
Application.ShutDown();
Application.Exit();
Application.Dispose();

Tra molti altri Niente funziona.


Ecco come faccio il mio:

// Any control that causes the Window.Closing even to trigger.
private void MenuItemExit_Click(object sender, RoutedEventArgs e)
{
    this.Close();
}

// Method to handle the Window.Closing event.
private void Window_Closing(object sender, CancelEventArgs e)
{
    var response = MessageBox.Show("Do you really want to exit?", "Exiting...",
                                   MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
    if (response == MessageBoxResult.No)
    {
        e.Cancel = true;
    }
    else
    {
        Application.Current.Shutdown();
    }
}

this.Close() solo Application.Current.ShutDown() dalla finestra principale dell'applicazione, tutte le altre finestre usano this.Close() . Nella mia finestra principale, Window_Closing(...) gestisce il pulsante x alto a destra. Se uno qualsiasi dei metodi richiede una chiusura della finestra, Window_Closing(...) cattura l'evento per lo spegnimento se l'utente conferma.

Il motivo per cui effettivamente utilizzo Application.Current.Shutdown() nella mia finestra principale è che ho notato che se è stato commesso un errore di progettazione e non ho dichiarato genitore di una delle mie finestre in un'applicazione, se la finestra viene aperta senza essere visualizzata prima dell'ultima chiusura della finestra attiva, mi rimane una finestra nascosta in esecuzione in background. L'applicazione non si spegnerà. L'unico modo per evitare perdite di memoria complete è per me andare nel Task Manager per chiudere l'applicazione. Application.Current.Shutdown() mi protegge da difetti di progettazione non intenzionali.

Questo è dalla mia esperienza personale. Alla fine, usa ciò che è meglio per il tuo scenario. Questa è solo un'altra informazione.



Per uscire dall'applicazione è possibile chiamare

System.Windows.Application.Current.Shutdown();

Come descritto nella documentazione del metodo Application.Shutdown , puoi anche modificare il comportamento di spegnimento della tua applicazione specificando uno ShutdownMode :

Arresto è chiamato implicitamente da Windows Presentation Foundation (WPF) nelle seguenti situazioni:

  • Quando ShutdownMode è impostato su OnLastWindowClose.
  • Quando ShutdownMode è impostato su OnMainWindowClose.
  • Quando un utente termina una sessione e l'evento SessionEnding è non gestito o gestito senza annullamento.

Si noti inoltre che Application.Current.Shutdown(); può essere chiamato solo dal thread che ha creato l'oggetto Application , ovvero normalmente il thread principale.


Dal codice xaml puoi chiamare un SystemCommand predefinito:

Command="SystemCommands.MinimizeWindowCommand"

Penso che questo dovrebbe essere il modo preferito ...


Application.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;


Utilizzare uno dei seguenti elementi se necessario:

1.

 App.Current.Shutdown();
OR
 Application.Current.Shutdown();

2.

 App.Current.MainWindow.Close();
OR
 Application.Current.MainWindow.Close();

Soprattutto tutti i metodi chiameranno l' closing event di closing event della classe Window e l'esecuzione potrebbe fermarsi ad un certo punto (perché di solito le applicazioni mettono dialoghi come "Sei sicuro?" O " Vuoi salvare i dati prima di chiudere? ", Prima che una finestra venga chiusa completamente)

3. Ma se si desidera interrompere immediatamente l'applicazione senza alcun avviso . Usa sotto

   Environment.Exit(0);

Un altro modo per farlo:

System.Diagnostics.Process.GetCurrentProcess().Kill();

Questo costringerà ad uccidere la tua applicazione in corso funziona sempre in un'applicazione multi-thread.

Nota: tieni a mente un'applicazione che ha salvato i dati in file da un altro thread.


Caliburn micro aromatizzato

public class CloseAppResult : CancelResult
{
    public override void Execute(CoroutineExecutionContext context)
    {
        Application.Current.Shutdown();
        base.Execute(context);
    }
}

public class CancelResult : Result
{
    public override void Execute(CoroutineExecutionContext context)
    {
        OnCompleted(this, new ResultCompletionEventArgs { WasCancelled = true });
    }
}

Provare

App.Current.Shutdown();

Per me

Application.Current.Shutdown(); 

non ha funzionato


Come diceva wuminqi , Application.Current.Shutdown(); è irreversibile, e credo che sia tipicamente usato per forzare un'applicazione a chiudere in momenti come quando un utente si disconnette o chiude Windows.

Invece, chiama this.close() nella tua finestra principale. È come premere Alt + F4 o il pulsante di chiusura [x] sulla finestra. Ciò causerà la chiusura di tutte le altre finestre di proprietà e finirà per chiamare Application.Current.Shutdown(); fintanto che l'azione vicina non è stata annullata. Si prega di consultare la documentazione MSDN su Chiusura di una finestra .

Inoltre, poiché this.close() è cancellabile, è possibile inserire una finestra di dialogo di conferma delle modifiche di salvataggio nel gestore dell'evento di chiusura. e.Cancel semplicemente un gestore di eventi per <Window Closing="..."> e modifica e.Cancel conseguenza. (Consultare la documentazione MSDN per ulteriori dettagli su come eseguire questa operazione.)


Se davvero ne hai bisogno per chiudere puoi anche usare Environment.Exit() , ma non è affatto aggraziato (più come terminare il processo).

Usalo come segue:

Environment.Exit(0)

Molto semplice. Usa il codice seguente:

Application.Current.Shutdown();






shutdown