我正在维护一个现有的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();
}
}
...
}
代码应该在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);
}
}
....
}
似乎按预期退出。但是,我不相信这是否是最佳做法?
是否真的有必要在Environment.Exit()之前调用this.Close()或this.Dispose()?
感谢。
的问候, SQR
答案 0 :(得分:16)
在您的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);
}