2008-12-23 49 views
1

我有一个条件,我需要关闭应用程序,所以我调用this.Dispose()当我设置一个certian标志。Application.Run抛出ArgumentException是未处理

起初我以为这是调用this.Dispose()后调用函数的问题,所以我移动代码成为最后一次调用的东西,但我仍然得到“ArgumentException未处理”“参数不是有效。”在Application.Run(新对myApp();?行

我在做什么错我错过了什么沿途或者,也许有更好的方式来关闭应用

回答

6

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

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

+0

为什么这个工作完美,我会吻你,但我打赌我会被stackoverflow禁止:) – Matt 2008-12-23 18:00:27

0

,如果你”?再关闭应用程序,从而卸载的AppDomain你并不真的需要调用Dispose(),因为从AppDomain的一切都会从内存中删除。

1

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

相关问题