现在,当用户想要退出我的应用程序时,我会做一些我必须做的事情(即断开与服务器的连接,保存用户数据......)然后我执行以下操作:
这需要几秒钟才能退出,并没有真正的用途(一切都已保存在服务器上,所以我真的不在乎那里发生了什么)
如果我使用它,我立即终止,没有任何我能想到的缺点:
System.Diagnostics.Process.GetCurrentProcess().Kill();
Run Code Online (Sandbox Code Playgroud)
为什么我不会终止我的进程并让CLR放弃AppDomain?
我知道小心处理你的共享资源(IO文件处理程序等)很重要(所以请不要回答:)),但一旦完成,是否真的有理由干净地退出我的应用程序?
我正在维护一个现有的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
我用两个窗口创建了新的WPF应用程序.
在MainWindow.xaml中添加了一个按钮,并在按钮的单击事件中编写了以下代码:
Window1 w = new Window1();
w.Show();
Run Code Online (Sandbox Code Playgroud)
我点击了那个按钮2-3次,它打开了Window1的多个实例.
一切都很好,直到这里.
现在,我关闭了MainWindow并且它没有关闭Windows1的实例.
我在想,因为MainWindow是拥有Process的那个,如果它关闭,其余的子窗口将自动关闭.
我在WinForms应用程序中执行了相同的项目,结果完全不同.在关闭MainWindow时,它确实关闭了其余的窗口.
我不明白这个概念吗?有人能告诉我谁拥有WPF中的进程或主线程?