相关疑难解决方法(0)

为什么我不应该使用Process.GetCurrentProcess().Kill()来退出我的WinForm应用程序?

现在,当用户想要退出我的应用程序时,我会做一些我必须做的事情(即断开与服务器的连接,保存用户数据......)然后我执行以下操作:

  • 使用布尔值退出所有主循环
  • 中止仍在运行的线程(通常是我的服务器轮询线程)
  • 请致电Application.Exit();

这需要几秒钟才能退出,并没有真正的用途(一切都已保存在服务器上,所以我真的不在乎那里发生了什么)

如果我使用它,我立即终止,没有任何我能想到的缺点:

 System.Diagnostics.Process.GetCurrentProcess().Kill();
Run Code Online (Sandbox Code Playgroud)

为什么我不会终止我的进程并让CLR放弃AppDomain?

我知道小心处理你的共享资源(IO文件处理程序等)很重要(所以请不要回答:)),但一旦完成,是否真的有理由干净地退出我的应用程序?

.net termination

23
推荐指数
2
解决办法
1万
查看次数

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

我正在维护一个现有的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

c# wpf exit

7
推荐指数
1
解决办法
2万
查看次数

谁拥有进程/主线程?

我用两个窗口创建了新的WPF应用程序.

  1. MainWindow.xaml
  2. Window1.xaml

在MainWindow.xaml中添加了一个按钮,并在按钮的单击事件中编写了以下代码:

Window1 w = new Window1();
w.Show();
Run Code Online (Sandbox Code Playgroud)

我点击了那个按钮2-3次,它打开了Window1的多个实例.

一切都很好,直到这里.

现在,我关闭了MainWindow并且它没有关闭Windows1的实例.

我在想,因为MainWindow是拥有Process的那个,如果它关闭,其余的子窗口将自动关闭.

我在WinForms应用程序中执行了相同的项目,结果完全不同.在关闭MainWindow时,它确实关闭了其余的窗口.

我不明白这个概念吗?有人能告诉我谁拥有WPF中的进程或主线程?

wpf multithreading process

2
推荐指数
1
解决办法
655
查看次数

标签 统计

wpf ×2

.net ×1

c# ×1

exit ×1

multithreading ×1

process ×1

termination ×1