【问题标题】:FormClosing shutdown event doesn't write to fileFormClosing 关闭事件不写入文件
【发布时间】:2016-08-19 22:29:35
【问题描述】:

我的计算机有一个备用电源,它与计算机和墙壁连接在一起。当我从墙上拔下电源线时,备用电源会在 2-5 分钟后关闭计算机。正是在这段时间里,我想使用以下代码将数据写入文件:

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
    if (e.CloseReason.Equals(CloseReason.WindowsShutDown))
    {
        writeContents("Interrupted");
        sendMessage("PWR - The Spring Test Machine has stopped");                
        return;
    }

    if (e.CloseReason.Equals(CloseReason.UserClosing)) 
    {
        if (MessageBox.Show("You are closing this application.\n\nAre you sure you wish to exit ?", "Warning: Not Submitted", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Stop) == DialogResult.Yes)
        {
            writeContents("Interrupted");
            return;
        }
        else
            e.Cancel = true; 
    } 
}

问题是它不起作用。我认为闭幕式的活动从来没有被调用过。任何想法将不胜感激。谢谢。

【问题讨论】:

  • 你订阅了这个活动吗?您只是没有将其粘贴到您的表单中吗?
  • 忘了说。是的,我订阅了。

标签: c# event-handling shutdown


【解决方案1】:

从这里http://www.daniweb.com/software-development/csharp/threads/253249/application-exit-does-not-trigger-the-formclosing

当您使用任务管理器“杀死”应用程序时,它不会触发任何 事件,它只是停止执行,这就是你关闭一个 已冻结的应用程序。如果您等待它处理任何 事件,那么它仍然会被冻结。

至于当你重新启动计算机或关机时,该事件将是 仅在有足够时间时才调用,系统会告诉所有人 它正在关闭的应用程序,只给他们少量的 是时候在它杀死他们之前处理业务了。 Windows 7 将显示一个 对话框告诉您哪些应用程序仍然很忙,并询问您是否 您想杀死它们并关闭或取消。但是对于XP,它只是 在 X 秒后杀死他们。

这几乎就是我想象的 FormClosing 的行为... Application.ApplicationExit Event 会是一个更好的监听事件吗?

【讨论】:

  • 感谢您提供的信息和建议。我会试试 ApplicationExit 看看是否可行。
【解决方案2】:

这里有一些关于 FormClosing 事件属性的有用信息:

Bug in FormClosingEventArgs.CloseReason?

您可以尝试使用 switch 语句,如下所示: Detect reason for form closing

【讨论】:

    【解决方案3】:

    不确定它是否有效,因为我需要先检查它,而且我现在不在我的机器前……但是您是否也尝试过 CloseReason 枚举的其他元素? 尝试 TaskManagerClosing 。 在任何情况下,首先尝试抛出一个消息(消息框),看看你是否真的有你想要的正确 CloseReason 并且如果你不希望每次检查时都关闭电脑,也不要忘记使用 e.Cancel = true 。 之后检查您写入文件的方法是否正常。

    也许这也有帮助 Prompt user to save when closing app

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多