2012-03-29 151 views
0

我希望我的C#WinForms應用程序在應用程序關閉或計算機關閉時運行一些代碼(通過啓動菜單,我知道如果他們拔下插件:P不會工作)。關閉WinForms應用程序並關閉計算機並運行代碼?

基本上我有一些日誌文件,我需要應用程序上傳到FTP服務器關機。

我該怎麼做?

+0

@BryanCrosby'AppDomain.CurrentDomain.ProcessExit + = new EventHandler(OnExit);'並使用窗體的FormClosing事件。 – 2012-03-29 04:41:52

回答

2

您可以通過攔截FormClosing事件來檢測應用程序的關閉。

您可以使用SystemEvents檢測寡婦關機,註銷,暫停等。我建議不要使用系統事件,因爲您可能沒有足夠的時間來執行上傳到遠程服務器(我認爲默認值爲3秒)。

+0

那麼what'dya知道這實際上工作! – 2012-03-29 05:06:17

0

我認爲你應該專注於關閉應用程序而不是關閉計算機,因爲當計算機關閉時它將沒有足夠的資源&做工作的時間(上傳和內容) 。當應用程序關閉時,使用應用程序的Form_Closing事件來完成工作,或者在應用即將關閉時使用Form_Closed事件觸發。

Closing event Closed Event

+0

我需要關閉上傳,因爲用戶沒有與我的應用進行交互。它隱藏並在後臺運行。 – 2012-03-29 04:42:59

+2

您鏈接到WPF事件。問題是關於WinForms。 – 2012-03-29 04:43:15

+0

請逐字回答。重要的是邏輯,算法 – 2012-03-29 04:51:13

1

勾住形式的FormClosing事件。無論何時關閉窗體,程序調用Close,Windows關閉等,此表單將在任何時候被解僱。

如果您需要知道您正在處理的是哪種退出, FormClosingEventArgs有一個CloseReason屬性(類型CloseReason),它會告訴你爲什麼窗口正在關閉;它包含像UserClosing和WindowsShutDown這樣的值。

雖然您可能無法在Windows關機時上傳到FTP服務器。在Windows Vista和7中,在Windows保留強制終止它們的權利之前,應用程序只能關閉2秒。您最好在本地保存日誌,並在下次啓動應用程序時上傳它。

+0

是的,我已經嘗試使用'FormClosing'事件,雖然我從來沒有想過只是在計算機啓動備份時上傳文件。我會嘗試在文件的末尾添加一個小標記,讓程序知道文件仍然需要上傳。謝謝! – 2012-03-29 04:46:52

+0

哎呀,抱歉接受你的答案,然後不接受,但有人發現如何讓它在關機/註銷工作。 – 2012-03-29 05:05:52

+0

@ ryansworld10,有趣。因此,從SystemEvents上傳文件比從FormClosing文件上傳文件更好嗎?我沒有想到(儘管這當然有可能),所以我很想知道更多。我會認爲2秒截止將適用於任何方式。 – 2012-03-29 12:00:02