我的电脑有一个备用电源,它与它和墙内联。当我从墙上拔下电源线时,我有 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.nnAre you sure you wish to exit ?", "Warning: Not Submitted", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Stop) == DialogResult.Yes)
{
writeContents("Interrupted");
return;
}
else
e.Cancel = true;
}
}
问题是它没有用。我不认为闭幕活动曾经被召唤过。任何想法将不胜感激。谢谢。
从这里 http://www.daniweb.com/software-development/csharp/threads/253249/application-exit-does-not-trigger-the-formclosing
当您使用任务管理器"杀死"应用程序时,它不会触发任何 事件,它只是停止执行,这就是您关闭 已冻结的应用程序。如果您等待它处理任何 事件,那么它仍然会被冻结。
至于当您重新启动计算机或关机时,事件将是 只有在有足够的时间时才调用,他们系统告诉所有 它正在关闭的应用程序,只给了他们很短的 是时候在它杀死他们之前处理业务了。Windows 7 将显示 对话框告诉您哪些应用程序仍在繁忙,并询问您是否 你想杀死它们并关闭或取消。但至于XP,它只是 在 X 秒后杀死它们。
这几乎就是我想象的FormClosesing的行为......Application.ApplicationExit Event 是否是更好的侦听事件?
下面是有关 FormClosing 事件属性的一些有用信息:
FormClosesingEventArgs.CloseReason中的错误?
您可以尝试使用 switch 语句,如下所示:检测表单关闭的原因
不确定它是否有效,我需要先检查它,我现在不在机器前面.. 但是您是否也尝试过 CloseReason 枚举的其他元素?尝试 任务管理器关闭 。无论如何,首先尝试抛出一条消息( messagebox ( 看看你是否真的有你想要的正确 CloseReason,如果你不希望电脑每次检查它时都关闭,也不要忘记使用 e.Cancel = true 。之后,检查您用于写入文件的方法是否正常。
也许这也会有所帮助关闭应用时提示用户保存