程序的關閉是很講究的,處理的不好的話,將軟件連續開啟和關閉,當數次後在啟動軟件後程序會崩潰。或者程序退出很慢。細節決定成敗,一款好的軟件應該從各方面都要做嚴格地反復地推敲,力爭做到無可挑剔。
有的程序員喜歡在關閉的時候讓程序做一些事情,比如保存一些記錄什麼的,我覺得這樣大可不必,因為這些會影響退出的時間,單一職責原則一再強調職責要單一,關閉程序就是關閉程序,不要摻雜其它動作。
當然僅僅一個關閉也有很多種方式的,比如窗體Close(),Application.Exit(),Application.ExitThread(),Enviroment.Exit(0),以及Process.GetCurrentProcess().Kill()。這些相信大家在退出時都用到過。這些方法都可以退出程序。在我做的最初的一個項目中,由於剛開始沒有全面的設計,很多功能都是大家有了新的想法而加上的,因此裡面大量用到了線程,有名字的,沒名字的,有的可以管理,有的根本沒法獲取它並管理它。在退出子窗口的時候,一般使用當前Form.Close(),然後將該窗口內的線程獲取到,再一一Abort(),但是在退出主程序的時候,this.Close(),就很慢了,因為很多線程還在運行。所以當時就使用殺死進程的方法。
以上那些退出的方法我都使用過。
[csharp]
<strong>Close()</strong>,關閉主窗體,但是這個關閉,程序會調用Dispose方法,也就是窗體中Designer中的,這樣釋放當前窗體的資源,但是不能強制結束循環,如果程序中有線程在運行,那麼關閉需要很久。
<strong>Application.Exit()</strong>,這個當有線程時,也要等很久。
<strong>Application.ExitThread()</strong>,退出當前線程上的消息循環,並關閉該線程的窗口。
<strong>Enviroment.Exit(0)</strong>,該方法強制退出。
<strong>Process.GetCurrentProcess().Kill()</strong>,當你覺得其它方法退出不太及時或者失靈,那麼這個方法就是終極法寶,直接干掉進程,當然也退出了。
<strong>Close()</strong>,關閉主窗體,但是這個關閉,程序會調用Dispose方法,也就是窗體中Designer中的,這樣釋放當前窗體的資源,但是不能強制結束循環,如果程序中有線程在運行,那麼關閉需要很久。
<strong>Application.Exit()</strong>,這個當有線程時,也要等很久。
<strong>Application.ExitThread()</strong>,退出當前線程上的消息循環,並關閉該線程的窗口。
<strong>Enviroment.Exit(0)</strong>,該方法強制退出。
<strong>Process.GetCurrentProcess().Kill()</strong>,當你覺得其它方法退出不太及時或者失靈,那麼這個方法就是終極法寶,直接干掉進程,當然也退出了。
當然了,程序退出時,程序自己要處理很多資源,最安全的方式就是,主窗體Close方法,然後剩下的交給程序做,雖然退出慢,但是這是程序自身的機制去完成的退出絕對安全。可是用戶會允許你這麼做嗎,如果你的軟件點擊關閉了結果在進程中還生存了很久,或者半天還是放不了資源,那麼用戶很可能不再使用你的程序。所以本著一切為用戶著想的原則,退出還是速度快為好。我常用的方式是。
[csharp]
窗體.Close();
Process.GetCurrentProcess().Kill();
窗體.Close();
Process.GetCurrentProcess().Kill();
同時使用。
摘自 白楊樹