[英]FormClosing shutdown event doesn't write to file
我的計算機有一個備用電源,它與它和牆壁連接在一起。 當我從牆上拔下電源線時,我有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;
}
}
問題是它沒有用。 我認為關閉事件沒有被召喚過。 任何想法將不勝感激。 謝謝。
當您使用taskmanager“殺死”應用程序時,它不會觸發任何事件,它只是停止執行,這就是關閉已凍結的應用程序的方式。 如果你等待處理任何事件,那么它仍然會被凍結。
至於當你重新啟動計算機或關機時,只有在有足夠的時間時才會調用該事件,系統會告訴所有應用程序它正在關閉它們,並且只有在它們殺死它們之前只給它們很短的時間來處理業務。 Windows 7將顯示一個對話框,告訴您哪些應用程序仍處於忙碌狀態,並詢問您是否要終止它們並關閉或取消。 但至於XP,它只是在X秒后殺死它們。
這就是我想象FormClosing行為的方式...... Application.ApplicationExit事件會成為一個更好的事件來監聽嗎?
不確定它是否正常工作我需要先檢查它並且我現在不在我的機器前面..但你是否也嘗試過CloseReason枚舉的其他元素? 嘗試TaskManagerClosing。 在任何情況下,首先嘗試拋出一條消息(消息框),看看你是否真的有你想要的正確的CloseReason,如果你不希望每次檢查時關閉電腦,也不要忘記使用e.Cancel = true。 之后檢查您寫入文件的方法是否正常。
也許這有助於提示用戶在關閉應用時保存
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.