【问题标题】:Is DoEvents() also evil in FormClosing?DoEvents() 在 FormClosing 中是否也是邪恶的?
【发布时间】:2014-08-25 08:44:12
【问题描述】:

关于我建议使用的另一个问题

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    while (processingLock)
        Application.DoEvents();
}

在 FormClosing 事件中(在完成冗长的计算后, processingLock 立即变为 false)。它的目的应该是让应用程序有条不紊地关闭,并且原始发布者没有使用线程。

在我建议的答案中,有人评论说 DoEvents 永远不好,提供此链接:Use of Application.DoEvents()

我阅读并(我认为)理解了这个问题。在我看来(这仍然是愚蠢的)如果我在 FormClosing 事件中使用上述 DoEvents 则不会发生混淆事件的风险 - 如果无法取消用户的关闭(例如设置 e.Cancel = true) .

我的问题:这是确保应用程序正常终止的有效方法吗?如果不是,为什么?

【问题讨论】:

  • 当用户疯狂地敲击窗口的关闭按钮以试图将其关闭并反复触发 FormClosing 事件时,您期望会发生什么?如果您不知道,您肯定不知道,您是否愿意编写行为无法预测的代码?你至少测试过吗?没有理由避免编写正确的代码,您可以隐藏窗口并在“处理”结束时将其关闭。

标签: c# formclosing doevents


【解决方案1】:

感谢 cmets 和更多关于 relevant posts 的思考,我已经弄清楚为什么 FormClosing 的这种“特殊情况”并不特殊。

问题在于表单在 FormClosing 事件期间被禁用。用户不仅可以尝试多次关闭表单(这在这种情况下是可以的),而且她还可以单击任何其他 UI 元素 - 导致执行顺序不确定等问题在链接的文章中提到。

菜鸟的硬概念,感谢您的意见。

【讨论】:

    猜你喜欢
    • 2012-07-06
    • 2011-01-02
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 2014-03-28
    • 2011-12-07
    • 1970-01-01
    相关资源
    最近更新 更多