c# - programmazione - wpf simple application




Come si esce da un'applicazione WPF a livello di programmazione? (11)

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.


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 });
    }
}

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.)


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.


Molto semplice. Usa il codice seguente:

Application.Current.Shutdown();

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.


Possiamo usare il metodo this.Close() nel file MainWindow.xaml.cs per chiudere la finestra.

Oppure utilizzare il metodo App.Current.Shutdown() nel file MainWindow.xaml.cs per chiudere la finestra.



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)

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.


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);

private void _MenuExit_Click(object sender, RoutedEventArgs e)
{
   System.Windows.Application.Current.MainWindow.Close();
}

//Override the onClose method in the Application Main window

protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
    MessageBoxResult result =   MessageBox.Show("Do you really want to close", "",
                                          MessageBoxButton.OKCancel);
    if (result == MessageBoxResult.Cancel)
    {
       e.Cancel = true;
    }
    base.OnClosing(e);
}




shutdown