2

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

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

4

2 回答 2

4

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

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

于 2010-09-22T14:47:22.807 回答
2

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

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

我覆盖 Form1 FormClosed 事件

  • There is no FormClosed event for forms of type System.Windows.Forms.Form, only Closing and Closed.
  • You don't override an event. You override a virtual function from a base class or interface.
于 2010-09-22T14:47:22.963 回答