我有一个条件需要关闭应用程序,所以当我设置certian标志时我会调用this.Dispose()。
起初我认为这是在调用this.Dispose()之后调用函数的问题所以我将代码移动到最后调用的东西,但我仍然得到“ArgumentException未处理”“参数无效“。在Application.Run(new myApp(); line。
我做错了什么?我一路上都错过了什么吗?或者可能有更好的方法来关闭应用程序?
答案 0 :(得分:6)
尝试使用Application.Exit()
退出应用程序。
使用Application.Run(new MyForm());
时,使用表单对象作为主窗体在线程上创建消息循环。它尝试将来自应用程序的Win32消息传递给各自的对象。但是,当您在表单对象上调用Dispose()
时,尚未退出消息循环。当它尝试将下一条消息传递给您的表单对象时,它会失败,因为它已经处理并抛出异常。您应该要求关闭表单(通过调用表单上的Close
),然后要求表单处理事件,如果已完成,则在之后退出消息循环。另一种方式(更直接的方式)是通过调用Application.Exit()
来完全关闭线程上的消息循环,这将导致所有相关的表单被关闭。
答案 1 :(得分:1)
你应该使用this.Close()而不是this.Dispose()来关闭你的主表单。
答案 2 :(得分:0)
如果您关闭应用程序并因此卸载AppDomain,则实际上不需要调用Dispose(),因为AppDomain中的所有内容都将从内存中删除。