我正在维护一个现有的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
解决方法
在您的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);
- }