1

我有一个需要关闭应用程序的情况,所以我在设置一个 certian 标志时调用 this.Dispose ()。

起初我以为是调用 this.Dispose() 后调用函数的问题,所以我将代码移动到最后调用的东西,但我仍然得到“ArgumentException was unhandled”“Parameter is not valid”。在 Application.Run(new myApp(); 行。

我究竟做错了什么?一路上我错过了什么吗?或者也许有更好的方法来关闭应用程序?

4

3 回答 3

6

尝试使用Application.Exit()退出应用程序。

使用时Application.Run(new MyForm());,会在线程上创建一个消息循环,使用表单对象作为主表单。它尝试将到达应用程序的 Win32 消息传递给它们各自的对象。但是,当您调用Dispose()表单对象时,您还没有退出消息循环。当它尝试将下一条消息传递给您的表单对象时,它会失败,因为它已经被释放并抛出异常。您应该请求关闭表单(通过调用Close表单),然后请求表单处理事件,如果完成,然后退出消息循环。另一种方式(更直接的方式)是通过调用完全关闭线程上的消息循环,Application.Exit()这将导致所有相关表单关闭。

于 2008-12-23T17:42:24.777 回答
1

您应该使用 this.Close() 而不是 this.Dispose() 来关闭您的主窗体。

于 2008-12-23T18:51:43.700 回答
0

如果您正在关闭应用程序并因此卸载 AppDomain,您实际上不需要调用 Dispose(),因为 AppDomain 中的所有内容都将从内存中删除。

于 2008-12-23T17:42:05.323 回答