Application.Run抛出ArgumentException未处理

时间:2008-12-23 17:39:16

标签: c# winforms dispose argumentexception

我有一个条件需要关闭应用程序,所以当我设置certian标志时我会调用this.Dispose()。

起初我认为这是在调用this.Dispose()之后调用函数的问题所以我将代码移动到最后调用的东西,但我仍然得到“ArgumentException未处理”“参数无效“。在Application.Run(new myApp(); line。

我做错了什么?我一路上都错过了什么吗?或者可能有更好的方法来关闭应用程序?

3 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:1)

你应该使用this.Close()而不是this.Dispose()来关闭你的主表单。

答案 2 :(得分:0)

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