退出WPF应用程序的最佳做法是什么?

sqr*_*sqr 7 c# wpf exit

我正在维护一个现有的C#应用​​程序,我注意到以下代码没有按预期工作.

        private void Form1_Load(object sender, EventArgs e){
             ...
            if (proc.Length == 0)
            {                    
                proc = Process.GetProcessesByName("OpCon");
                if (proc.Length == 0)
                {
                    WriteLog("DataloggerService start: no TSS process detected; close;");
                    this.Close();
                }
            }
          ...
         }
Run Code Online (Sandbox Code Playgroud)

代码应该在Close()api调用后退出.但是,它仍在继续.

经过一些阅读和研究,我将其修改为

       private void Form1_Load(object sender, EventArgs e){
            ....
            if (proc.Length == 0)
            {                    
                proc = Process.GetProcessesByName("OpCon");
                if (proc.Length == 0)
                {
                    WriteLog("DataloggerService start: no TSS process detected; close;");
                    this.Dispose();
                    Environment.Exit(0);
                }
            }
            ....
        }
Run Code Online (Sandbox Code Playgroud)

它似乎按预期退出.但是,我不相信这是否是最佳做法?

是否真的有必要在Environment.Exit()之前调用this.Close()或this.Dispose()?

谢谢.

问候,Sqr

小智 17

在您的WPF应用程序中,只要在App.xaml中指定为StartupURI的MainWindow关闭,您的应用程序就会自动退出.

如果你想在你的终端处理这个应用程序退出,你仍然可以寻求以下解决方案.

覆盖MainWindow的onClosing并手动退出/关闭应用程序.

protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
    // Shutdown the application.
    Application.Current.Shutdown();
    // OR You can Also go for below logic
    // Environment.Exit(0);
}
Run Code Online (Sandbox Code Playgroud)