Winforms 当窗体关闭时,如何终止Windows Mobile 6.1窗体应用程序进程?

Winforms 当窗体关闭时,如何终止Windows Mobile 6.1窗体应用程序进程?,winforms,windows-mobile,compact-framework,windows-mobile-6.1,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(); /

在我编写的.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进程,等等。因此,该进程永远不会消亡,并且会创建更多的内存


如何确保在关闭/退出应用程序时终止此进程?谢谢。

首先,你不应该为了得到你想要的行为而越过表单关闭。仅关闭传递给Application.Run的表单将导致应用程序的消息泵退出,并应导致进程结束。对于Windows Mobile,您应该将表单的showmimize属性设置为
false
,以防止表单被最小化-您应该在右上角有一个(OK),而不是一个(X)


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

您的问题是您有
Form.MinimizeBox=true
。将其更改为
false
,在单击ok时关闭表单,而不是在单击x时最小化表单

在你的问题中有更多的事情要考虑:

我覆盖Form1 FormClosed事件

  • 对于
    System.Windows.forms.Form
    类型的表单,没有
    FormClosed
    事件,只有
    关闭
    关闭
  • 您不能覆盖事件。您可以从基类或接口重写虚拟函数

谢谢你。顺便说一句,很棒的博客。它帮助了好几次。我不熟悉这种发展。如何以编程方式检测是否有工作线程在运行?每个新表单实例都有自己的线程吗?在我切换的应用程序中,我有几个静态表单在运行,但我使用Form1作为起点和终点(也称为:应用程序“主机”),认为当我关闭此应用程序时,所有其他表单也将关闭。您可以通过编程方式检测线程,但这里不需要。在大多数情况下,线程将是通过调用新线程(或者可能是ThreadPool.QueueWorkItem)在代码中创建的线程。表单不创建线程(除非您为其显式编写代码)。