2012-03-08 78 views
0

我已经用C#编写了一个应用程序。但即使在关闭表格之后,应用程序也会运行。那是.exe和.vshost文件将仍然运行。所以我用下面的代码来终止应用程序。但它并没有终止。关闭表格后终止应用程序

public void Form1_Closing(object sender, FormClosingEventArgs e) 
    { 
     Process[] pArry = new Process[500]; 

     pArry = Process.GetProcesses(); 
     foreach (Process p in pArry) 
     { 
      string s1 = p.ProcessName; 
      s1 = s1.ToLower(); 
      if ((s1.Equals("new_prj.vshost"))) 
      { 
       p.Kill(); 
      } 
     } 
    } 

我的项目名称是new_prj。如果我在Button_Click函数中编写相同的代码片段,它可以正常工作。但在表单关闭功能中不起作用。有人遇到同样的问题吗?

+1

我猜这是行不通的,因为表单没有真正关闭(也许你只是停用它或将可见性设置为false或其他) - 在任何情况下,这是非常丑陋和黑客行为的代码...不要使用任何东西像这样 - 看我的答案。 – Carsten 2012-03-08 18:13:42

+1

另外,如果你要这样做,你应该这样做Form.Closed不Form.Closing。关闭意味着它尚未关闭! – 2012-03-08 18:16:16

+0

我按下'X'按钮关闭窗体。它是隐藏表单而不是关闭它吗?那么如何关闭它? – ragz 2012-03-08 18:27:26

回答

1

如果您确实想从任何地方退出您的应用程序,您可以使用Environment.Exit(),但我会建议使用您的表单解决问题。如果您发布了更多的代码,我们可能会发现问题。

+0

它工作。但问题是,它没有进入Form_Closing函数。 – ragz 2012-03-08 18:45:12

2

你能用这个吗?

Application.Exit(); 
+0

它工作。但问题是,它没有进入Form_Closing函数。 – ragz 2012-03-08 18:45:41

+0

你可以使用ActiveForm.Close();何时关闭表格? – Andrew 2012-03-08 18:49:16

0

你可以试试Application.Exit太多,但作为卡斯滕说,您要治疗的症状,而不是原因。

2

这可能有几个原因。 如果它是一个多线程应用程序,那么你可能会有另一个线程运行,阻止进程终止。

请提供一些更多详细信息。

编辑

我张贴了类似的问题,并得到了有关如何使用线程的一些输入。请参阅this post

这里是回答后一个有用的一些代码:

public void Start() 
{ 
    workerThread = new Thread(() => DoWork()); 
    doWork = true; 
    workerThread.IsBackground = true; 
    workerThread.Start(); 
} 

通知的IsBackground = true;

+0

它是一个多线程应用程序。我甚至放弃了Form_Closing函数中的所有线程。我猜它没有进入窗体关闭功能本身。 – ragz 2012-03-08 18:47:50

+0

中止线程时应该小心 - 你并不总是知道会带来什么样的麻烦,即使你放弃了这些步骤,那也需要一段时间才能发生。 也许你应该重新思考你使用线程的方式,偶尔验证一下,如果线程应该停止它的工作,也就是当你的应用程序需要关闭时。 – 2012-03-08 20:07:27

+0

另外,如果你的线程正在做后台工作,确保它们被设置为后台线程,这应该使它们完全从属于他们的父进程。 – Shibumi 2012-03-08 21:28:51

0

您是否尝试过使用Application.Exit()?