【问题标题】:Application.Run throws ArgumentException was unhandledApplication.Run 抛出 ArgumentException 未处理
【发布时间】:2008-12-23 17:39:16
【问题描述】:

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

一开始我以为是调用this.Dispose()后调用函数的问题,所以我把代码移到最后一个调用的地方,但是我仍然得到一个“ArgumentException was unhandled”“Parameter is not valid 。”在 Application.Run(new myApp(); 行。

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

【问题讨论】:

    标签: c# winforms dispose argumentexception


    【解决方案1】:

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

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

    【讨论】:

    • 为什么效果很好,我会吻你,但我敢打赌我会被stackoverflow禁止:)
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-03
        • 2012-08-10
        • 2018-11-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-07-11
        相关资源
        最近更新 更多