Как я могу выйти из приложения WPF программно?



в течение нескольких лет я использую C# (Windows Forms), я никогда не использовал WPF. Но, теперь я люблю WPF, но я не знаю, как я должен выйти из моего приложения, когда пользователь нажимает на пункт меню Выход из меню Файл.



Я пробовал:



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


среди многих других. Ничего не работает.

1066   15  

15 ответов:

для выхода из приложения вы можете позвонить

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

как описано в документации к Application.Shutdown метод вы также можете изменить поведение завершения работы вашего приложения, указав ShutdownMode:

Shutdown неявно вызывается Windows Presentation Foundation( WPF) в следующих ситуациях:

  • когда ShutdownMode установлен в OnLastWindowClose.
  • когда ShutdownMode имеет значение OnMainWindowClose.
  • когда пользователь завершает сеанс и событие SessionEnding либо не обрабатывается, либо обрабатывается без отмены.

обратите внимание, что Application.Current.Shutdown(); может быть вызван только из потока, который создал Application "объект", т. е. обычно основной поток.

Если вы действительно нужно, чтобы закрыть вы также можете использовать окружающая среда.Exit (), но это совсем не изящно (больше похоже на завершение процесса).

использовать его следующим образом:

Environment.Exit(0)

как wuminqi сказал,Application.Current.Shutdown(); является необратимым, и я считаю, что он обычно используется для принудительного закрытия приложения в такие моменты, как когда пользователь выходит из системы или завершает работу Windows.

вместо этого позвоните this.close() в главном окне. Это то же самое, что нажать Alt + F4 или кнопку Закрыть [x]в окне. Это приведет к закрытию всех других принадлежащих окон и в конечном итоге вызовет Application.Current.Shutdown(); пока близко не отмененный. Пожалуйста, смотрите документацию MSDN на закрыть окно.

кроме того, потому что this.close() отменяется вы можете поместить в диалоговом окне подтверждения сохранения изменений в обработчике событий закрытия. Просто сделайте обработчик событий для <Window Closing="...">, и e.Cancel соответственно. (См. Примечание для получения более подробной информации о том, как это сделать.)

при необходимости используйте любое из следующих средств:

1.

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

2.

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

прежде всего методы будут вызывать closing event на Window класс и выполнение может остановиться в какой-то момент (причина обычно приложения ставят диалоги, как 'вы уверены?- иливы хотите сохранить данные перед закрытием?', прежде чем окно будет полностью закрыто)

3. но если вы хотите завершить приложение без какого-либо предупреждения немедленно. Используйте ниже

   Environment.Exit(0);

Это должно сделать трюк:

Application.Current.Shutdown();

Если вам интересно, вот некоторые дополнительные материалы, которые я нашел полезными:

подробная информация о применении.Ток

жизненный цикл приложения WPF

вот как я делаю мои:

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

Я только призываю к Application.Current.ShutDown() в главном окне программы все остальные окна используют this.Close(). В моем главном окне, Window_Closing(...) обрабатывает верхний правый . Если какой-либо из методов вызывает window closer, Window_Closing(...) захватывает событие для завершения работы, если пользователь подтверждает.

причина, по которой я на самом деле использовать Application.Current.Shutdown() в моем главном окне я заметил, что если была допущена ошибка дизайна, и я не объявил родителя одного из моих окна в приложении, если это окно открывается без отображения до последнего активного закрытия окна, я остаюсь со скрытым окном, работающим в фоновом режиме. Приложение не будет закрыто. Единственный способ предотвратить полную утечку памяти для меня, чтобы пойти в Диспетчер Задач закрыть приложение. Application.Current.Shutdown() защищает меня от непреднамеренных недостатков дизайна.

это из моего личного опыта. В конце концов, используйте то, что лучше всего подходит для вашего сценария. Это просто еще одна часть информации.

не должно быть Application.ShutDown(); или .Exit() сообщение.

Application является статическим классом. Это не относится к текущему приложению. Вам нужно добраться до текущего приложения, а затем закрыть его, как это:

Application.Current.Shutdown();

попробовать

App.Current.Shutdown();

для меня

Application.Current.Shutdown(); 

не работает.

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

по моему разумению, Application.Current.Shutdown() также имеет свой недостаток.

Если вы хотите показать окно подтверждения, чтобы пользователи могли подтвердить выход или нет,Application.Current.Shutdown() необратим.

еще один способ сделать это:

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

это заставит убить ваше приложение в процессе всегда работает в многопоточном приложении.

Примечание: просто заботиться о приложении, которое имеет сохранить данные в файлах из другого потока.

Caliburn micro flavoured

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

из кода xaml вы можете вызвать предопределенный SystemCommand:

Command="SystemCommands.MinimizeWindowCommand"

Я думаю, это должно быть предпочтительным способом...

мы можем использовать this.Close() метод MainWindow.xaml.cs файл для закрытия окна.

или использовать App.Current.Shutdown() метод MainWindow.xaml.cs файл для закрытия окна.

очень удобно. Используйте следующий код:

Application.Current.Shutdown();

Comments

    Ничего не найдено.