解决WinCE开发中滥用Application.Exit();带来的神秘错误!

  • Post author:
  • Post category:其他


解决方案:

1.主窗体中退出按钮的代码



Application.Exit();->改为  this.Dispose();


2.主窗体中修改子窗体的弹出方式由Show 改为


ShowDialog()



并在DialogREsult返回时,用

this.Close()将

主窗体关闭。千万不能用Application.Exit();






3.子窗体中的退出按钮将“


Application.Exit();” 改为 “


this.DialogResult = DialogResult.OK;“







Application.Exit 是一种强行退出方式,就像 Win32 的 PostQuitMessage()。它意味着放弃所有消息泵,展开调用堆栈,并将执行返回给系统。

在 Windows(Win32 或 .NET)中关闭应用程序的正确方式是关闭它的主应用程序窗口(例如 Form.Close)。主消息泵结束后依然存在的任何窗口都需要手动关闭。在应用程序退出之前通过调用 Form.Close 或 Form.Dispose 来关闭窗口是清除窗口的良好做法,但这需要您有意识地去做。我们需要记住,.NET Framework 的 OnClosing() 是 Win32 的托管版本的 WM_CLOSE,而非 WM_DESTROY。

另外,如果您使用 form.Close(),通过处理 OnClosing 或 OnClosed 事件,就可以让您的应用程序清理内容、关闭文件等。如果您通过 Application.Exit 强行退出应用程序,就无法调用这些事件。

补充:

因为我的窗体显示模式是 Login(主窗体) ->Main -> Other

故,当从Other退至Main时,再从Main退出,还是有此神秘错误,




this.Dispose();并没有释放掉Other里面的一些资源,比如ListCollection或是Service等等

采用强制“

System.Diagnostics.Process.GetCurrentProcess().Kill();

” 来把进程彻底杀死。



版权声明:本文为UnOpenMyCode原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。