C# DoEvents()在形式上也是邪恶的吗?

C# DoEvents()在形式上也是邪恶的吗?,c#,formclosing,doevents,C#,Formclosing,Doevents,我建议使用另一个问题 private void Form1_FormClosing(object sender, FormClosingEventArgs e) { while (processingLock) Application.DoEvents(); } 在FormClosing事件中(长时间计算完成后processingLock立即变为false)。它应该有助于有序地关闭应用程序,并且原始海报没有使用线程 在我建议的答案中,有人评论道DoEvents永远都不好

我建议使用另一个问题

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    while (processingLock)
        Application.DoEvents();
}
在FormClosing事件中(长时间计算完成后processingLock立即变为false)。它应该有助于有序地关闭应用程序,并且原始海报没有使用线程

在我建议的答案中,有人评论道DoEvents永远都不好,提供了以下链接:

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


我的问题:这是确保应用程序顺利终止的有效方法吗?如果不是,原因是什么?

多亏了评论和对表单关闭的更多思考,我已经弄明白了为什么FormClosing的“特例”毕竟不是特例

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


noobs的硬概念,谢谢您的输入。

当用户疯狂地敲打窗口的关闭按钮试图将其关闭,并反复触发FormClosing事件时,您预计会发生什么?如果您不知道,当然也不知道,那么您对编写无法预测其行为的代码感到满意吗?你至少试过了吗?没有什么好的理由可以避免编写正确的代码,您可以隐藏窗口并在“处理”结束时关闭它。