如何在表单关闭时终止Windows Mobile 6.1表单应用程序进程?

时间:2010-09-22 14:24:25

标签: winforms windows-mobile compact-framework windows-mobile-6.1

在我编写的.Net CF 3.5 WinForms程序的Program.cs文件中,我通过实例化Form1的新实例来启动应用程序。

Application.Run(new Form1());

当我想关闭/退出应用程序时,我重写Form1 FormClosed事件,以便我可以确保退出应用程序。

// In Form1 code-behind
private void OnFormClosed(object sender, EventArgs e)
{
    Application.Exit(); // Doesn't kill process
}

当这段代码运行时,我希望应用程序从屏幕上消失(关闭),我希望它运行的过程就像死一样。该应用程序关闭(消失),但不幸的是,该过程(我们将其称为app.exe)仍然无限期地运行。当我再次启动应用程序并关闭它时,它会旋转另一个app.exe进程等等。因此,该进程永远不会死亡,并且正在创建更多的内存。

关闭/退出应用时,如何确保此过程被终止?感谢。

2 个答案:

答案 0 :(得分:4)

首先,你不应该超越OnFormClosed来获得你所追求的行为。只需关闭传入Application.Run的表单,就会导致应用程序的消息泵退出,而 会导致进程结束。对于Windows Mobile,您应该将表单的ShowMinimize属性设置为false以防止它被最小化 - 您应该在右上角有一个(OK),而不是(X)。

如果此表单关闭时进程没有退出,那么99.99%的罪魁祸首就是你有一个仍在运行的工作线程阻止进程关闭。确保所有线程都将IsBackground设置为true(对于CF 3.5),并且作为预防措施,所有线程都应该具有某种形式的退出通知或标记。不要依赖终止过程来为你撕掉它们。

答案 1 :(得分:2)

您的问题是您有Form.MinimizeBox = true。如果 x 点击确定而不是最小化,则将其更改为false,表单将关闭 >点击。

您的问题还需要考虑更多事项:

  

我重写了Form1 FormClosed事件

  • FormClosed类型的表单没有System.Windows.Forms.Form个事件,只有ClosingClosed
  • 您没有覆盖一个事件。您覆盖来自基类或接口的虚拟函数。