星期日, 1月 11, 2015

[Debug]呼叫Application.Exit 沒有作用?

之前在調整公司的系統的東西時,發現了一個奇怪的小 Bug。
整個流程,就是啟動 WindowForm 程式時會做些簡單的偵測處理,
然後叫出登入畫面,使用者可以開始使用程式。

問題就出在啟動後針對系統做偵測然後叫出登入畫面,
當這個偵測這個過程中如果出了錯誤不允許使用者繼續使用下去時,
程式應該是要自行關掉的,奇妙的就是,明明應該要關掉的程式,
竟然自行的跳出了登入畫面...
後來追查了一下,才發現原來是前輩用了錯的關閉程式的 CODE。

先來說一下我得到的結論好了,
關於關閉程式這個方法,正確的一共有兩種:
1. Application.Exit();
2. Enviroment.Exit();
3. Return; => 這是不建議,但還是能看到的第三種 :P

Application.Exit() 這個就是前輩原來用的錯誤寫法,
甚麼?!你說我上面說這是正確的寫法怎麼還會錯?
對... 真的錯了,但是不是語法上的錯誤,而是使用的地方不對。

根據MSDN上寫關於 Application.Exit 這個函式

Informs all message pumps that they must terminate, and then closes all application windows after the messages have been processed.

簡單來說 Appliction.Exit()這個用法是用來關閉視窗程式的,
可是在出錯的程式碼中,這支程式還在 Console 狀態下執行系統偵測,
尚未呼叫出任何視窗畫面,
所以,這個 Application.Exit() 就被華麗的無視了XD

聰明的你,不用想太多,
對,在這個狀況下改用 Enviroment.Exit();
就可以完美的解決這個問題了~

打完收工~ 呼~
Refference : 
Rico桑的這篇文則是針對執行了Application.Exit()執行後的運作再做測試~ 有興趣的可以自己看一下 

沒有留言: