我有一个需要关闭应用程序的情况,所以我在设置一个 certian 标志时调用 this.Dispose ()。
起初我以为是调用 this.Dispose() 后调用函数的问题,所以我将代码移动到最后调用的东西,但我仍然得到“ArgumentException was unhandled”“Parameter is not valid”。在 Application.Run(new myApp(); 行。
我究竟做错了什么?一路上我错过了什么吗?或者也许有更好的方法来关闭应用程序?
我有一个需要关闭应用程序的情况,所以我在设置一个 certian 标志时调用 this.Dispose ()。
起初我以为是调用 this.Dispose() 后调用函数的问题,所以我将代码移动到最后调用的东西,但我仍然得到“ArgumentException was unhandled”“Parameter is not valid”。在 Application.Run(new myApp(); 行。
我究竟做错了什么?一路上我错过了什么吗?或者也许有更好的方法来关闭应用程序?
尝试使用Application.Exit()
退出应用程序。
使用时Application.Run(new MyForm());
,会在线程上创建一个消息循环,使用表单对象作为主表单。它尝试将到达应用程序的 Win32 消息传递给它们各自的对象。但是,当您调用Dispose()
表单对象时,您还没有退出消息循环。当它尝试将下一条消息传递给您的表单对象时,它会失败,因为它已经被释放并抛出异常。您应该请求关闭表单(通过调用Close
表单),然后请求表单处理事件,如果完成,然后退出消息循环。另一种方式(更直接的方式)是通过调用完全关闭线程上的消息循环,Application.Exit()
这将导致所有相关表单关闭。
您应该使用 this.Close() 而不是 this.Dispose() 来关闭您的主窗体。
如果您正在关闭应用程序并因此卸载 AppDomain,您实际上不需要调用 Dispose(),因为 AppDomain 中的所有内容都将从内存中删除。