【问题标题】:Application.Exit() fails to run [duplicate]Application.Exit() 无法运行 [重复]
【发布时间】:2012-12-19 19:06:15
【问题描述】:

可能重复:
Application.Exit

我有一个 Winforms 应用程序,其中 Application.Exit() 无法运行。

public Form1()
{       
   InitializeComponent();           
   path=parseINI();//Gets path from ini file           
} 

在我的例子中,Application.Exit() 是从 parseINI 方法调用的,但它不起作用。是应用程序启动时调用它的问题吗?我把它放在加载表单后运行的另一种方法中,它在那里工作。我确实在我的 parseINI 方法中使用了 Environment.Exit,并且效果很好(尽管它用于控制台应用程序而不是 WinForms)。

编辑:我可能应该添加它作为检查,以确保正在读取的文件格式正确,如果是,则不调用它,否则程序退出。

【问题讨论】:

  • 你怎么知道它失败了?有什么例外吗?行为不端?
  • 在大多数情况下,使用 Application.Exit 是无法正确处理程序流的。在某些情况下它是合适的,但它被滥用的次数比被恰当地使用的次数要多。

标签: c# winforms


【解决方案1】:

这可能是因为当 Form ctor 执行时,您还没有通过 Application.Run 启动应用程序。

常见的启动代码模板如下:

Application.Run(new Form1());

如果是这种情况,请在 Application.Run 之前调用 Application.Exit。因此,在您调用 exit 之后,您实际上调用了 Run,因此应用程序运行。

【讨论】:

【解决方案2】:

在 parseINI() 中调用 Form.Close() 方法而不是 Application.Exit()

【讨论】:

    【解决方案3】:

    Environment.Exit() 方法终止应用程序,关闭应用程序线程。确实,来自documentation

    终止此进程并为底层操作系统提供指定的退出代码。

    为什么必须从 parseINI 方法中关闭应用程序?

    无论如何,Application.Exit() 的方法调用对您不起作用,因为阅读MSDN page

    此方法停止所有线程上所有正在运行的消息循环并关闭应用程序的所有窗口。此方法不会强制应用程序退出。 Exit 方法通常在消息循环中调用,并强制 Run 返回。要仅退出当前线程的消息循环,请调用 ExitThread。

    然后,您可以将此行添加到您的构造函数中,以“运行”应用程序,允许您使用Application.Exit()

    Application.Run(new YourForm());
    

    你可以在这里找到一个有趣的讨论:http://geekswithblogs.net/mtreadwell/archive/2004/06/06/6123.aspx

    阅读this answer了解详情。 此外,请阅读 this 重要的 SO 问题,以更好地了解 Environment.Exit()Application.Exit() 之间的区别。

    【讨论】:

    • 感谢您的链接。那里有很多很好的信息。
    • @Amanda_Panda 不客气。
    猜你喜欢
    • 2016-11-21
    • 1970-01-01
    • 2012-12-09
    • 1970-01-01
    • 2010-10-07
    • 2020-02-21
    • 2013-03-18
    • 2016-02-25
    • 2021-08-19
    相关资源
    最近更新 更多