首页 文章

如何以编程方式退出WPF应用程序?

提问于
浏览
391

在我使用C#(Windows Forms)的几年里,我从未使用过WPF . 但是,现在我喜欢WPF,但是当用户点击“文件”菜单中的“退出”菜单项时,我不知道如何退出应用程序 .

我试过了:

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

在许多其他人中 . 什么都行不通 .

15 回答

  • 651

    非常简单 . 使用以下代码:

    Application.Current.Shutdown();
    
  • 23

    不应该有 Application.ShutDown();.Exit() 消息 .

    Application 是一个静态类 . 它不涉及当前的应用程序 . 您需要转到当前应用程序,然后将其关闭,如下所示:

    Application.Current.Shutdown();
    
  • 16

    这应该是诀窍:

    Application.Current.Shutdown();
    

    如果您有兴趣,这里有一些我觉得有用的其他材料:

    Details on Application.Current

    WPF Application LifeCycle

  • 6

    这就是我的做法:

    // 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(...) 处理右上方的 x 按钮 . 如果任何方法要求窗口关闭, Window_Closing(...) 抓取事件以在用户确认时关闭 .

    我在我的主窗口中实际使用 Application.Current.Shutdown() 的原因是我在应用程序中声明了我的一个窗口的父窗口,如果在最后一个活动窗口关闭之前打开该窗口而没有显示,我就离开了在后台运行的隐藏窗口 . 该应用程序不会关闭 . 防止完全内存泄漏的唯一方法是让我进入任务管理器关闭应用程序 . Application.Current.Shutdown() 保护我免受意外的设计缺陷 .

    这是我个人的经验 . 最后,使用最适合您场景的方法 . 这只是另一条信息 .

  • -1

    尝试

    App.Current.Shutdown();
    

    为了我

    Application.Current.Shutdown();
    

    没用 .

  • 5

    Caliburn微味

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

    由于wuminqi saidApplication.Current.Shutdown(); 是不可逆转的,我相信它通常用于强制应用程序关闭,例如用户注销或关闭Windows时 .

    而是在主窗口中调用 this.close() . 这与按下窗口上的Alt F4或关闭[x]按钮相同 . 这将导致所有其他拥有的窗口关闭,并且只要关闭操作未被取消,最终将调用 Application.Current.Shutdown(); . 请参阅Closing a Window上的MSDN文档 .

    此外,因为 this.close() 是可取消的,所以您可以在结束事件处理程序中放入保存更改确认对话框 . 只需为 <Window Closing="..."> 创建一个事件处理程序并相应地更改 e.Cancel . (有关如何执行此操作的详细信息,请参阅MSDN documentation . )

  • -1
    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);
    }
    
  • 2

    如果你真的需要它关闭,你也可以使用Environment.Exit(),但它根本不优雅(更像是结束过程) .

    使用方法如下:

    Environment.Exit(0)
    
  • 125

    根据需要使用以下任何一项:

    1.

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

    2.

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

    上面所有的方法都会调用 WindowWindow 类,并且执行可能会在某个时刻停止(因为通常应用程序会在窗口完全关闭之前放置像 'are you sure?' 或' Would you like to save data before closing? '这样的对话框)

    3. 但是如果你想立即终止应用程序 without any warning . 使用以下

    Environment.Exit(0);

  • 53

    根据我的理解, Application.Current.Shutdown() 也有其缺点 .

    如果您想显示确认窗口以让用户确认是否退出, Application.Current.Shutdown() 是不可逆转的 .

  • 15

    从xaml代码中,您可以调用预定义的SystemCommand:

    Command="SystemCommands.MinimizeWindowCommand"
    

    我认为这应该是首选方式......

  • 5

    要退出您的应用程序,您可以致电

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

    Application.Shutdown方法的文档中所述,您还可以通过指定ShutdownMode来修改应用程序的关闭行为:

    在以下情况下,Windows Presentation Foundation(WPF)会隐式调用Shutdown:ShutdownMode设置为OnLastWindowClose时 . 当ShutdownMode设置为OnMainWindowClose时 . 当用户结束会话并且SessionEnding事件未处理或处理而没有取消时 .

    另请注意, Application.Current.Shutdown(); 只能从创建 Application 对象的线程调用,即通常是主线程 .

  • 5

    另一种方法可以做到这一点:

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

    这将强制终止您的应用程序正在多线程应用程序中工作 .

    注意:只关心将数据保存在另一个线程的文件中的应用程序 .

  • -6

    Application.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;

相关问题