在我编写的.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进程等等。因此,该进程永远不会死亡,并且正在创建更多的内存。
关闭/退出应用时,如何确保此过程被终止?感谢。
答案 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
个事件,只有Closing
和Closed
。