我的计算机有一个备用电源,它与它和墙壁连接在一起。当我从墙上拔下电源线时,我有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;
}
}
问题是它不起作用。我认为关闭事件没有被召唤过。任何想法将不胜感激。谢谢。
答案 0 :(得分:3)
当您使用taskmanager“杀死”该应用程序时,它不会触发任何操作 事件,它只是停止执行,这是你关闭的方式 已冻结的应用程序。如果你等待它处理任何 事件,然后它仍然会被冻结。
当您重新启动计算机或关机时,事件将是 只有在有足够的时间时才会调用它们,系统会告诉所有人 应用程序正在关闭,只给它们少量的 在它们杀死之前处理业务的时间。 Windows 7将显示一个 对话框告诉您哪些应用程序仍然忙碌并询问您是否 你想要杀死它们并关闭或取消。但至于XP,它只是 在X秒后杀死它们。
这就是我想象FormClosing的行为...... Application.ApplicationExit事件会成为一个更好的事件来监听吗?
答案 1 :(得分:1)
以下是有关FormClosing事件的属性的一些有用信息:
Bug in FormClosingEventArgs.CloseReason?
您可以尝试使用switch语句,如下所示: Detect reason for form closing
答案 2 :(得分:0)
不确定它是否正常工作我需要先检查它并且我现在不在我的机器前面..但你是否也尝试过CloseReason枚举的其他元素? 尝试TaskManagerClosing。 在任何情况下,首先尝试抛出一条消息(消息框),看看你是否真的有你想要的正确的CloseReason,如果你不希望每次检查时关闭电脑,也不要忘记使用e.Cancel = true。 之后检查您写入文件的方法是否正常。
也许这也会有所帮助 Prompt user to save when closing app