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

解决方案:

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();” 来把进程彻底杀死。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值