Application閒置過久關閉
好久沒有寫網誌了,感覺這裡都快要生蜘蛛網了,今天朋友問了如何判斷一個WindowsForm表單閒置過一定的時間後,自動關閉程式,原本想說使用Form MouseMove & Form Click兩個Event加上Timer來判斷,時間到了自動關閉,但後來確發現要是Form上面有一個很大的Component占據了Form的頁面,這時候Form的Event將抓取不到。
還有一小點必須注意,如果Application.Idle EventHandler是使用靜態宣告的話,記得結束程式的時候要處理一下。
後來發現Application本身有提供一個Event Idle,Idle本身在表單停止任何動作的時候會進入一次,如此一來就可以搭配Timer來處理關閉程式的動作了,相關程式碼如下,不過這裡還有一個地方需要注意,Timer在執行的過程中並不算系統Idle,因此我下面的代碼做了點手腳,在Timer檢查的時候判斷的時間點要比Idle的時間點還要早100毫秒,這樣就可以巧妙的通過檢查了。
Timer timer = new Timer(); int lastidleTime = 0; //最後閒置時間 int checkTime = 2000; //檢查秒數 void timer_Tick(object sender, EventArgs e) { if (Environment.TickCount - lastidleTime > checkTime - 100) //Timer在執行的時候不算idle,所以扣一點時間 { timer.Enabled = false; Application.Exit(); } } void Application_Idle(object sender, EventArgs e) { //設定最後時間 lastidleTime = Environment.TickCount; } private void Form_Main_Load(object sender, EventArgs e) { Application.Idle += new EventHandler(Application_Idle); lastidleTime = Environment.TickCount; timer.Interval = checkTime; //每秒鐘檢查 timer.Tick += new EventHandler(timer_Tick); timer.Enabled = true; }
還有一小點必須注意,如果Application.Idle EventHandler是使用靜態宣告的話,記得結束程式的時候要處理一下。
留言
張貼留言
您好,我是 Lawrence,這裡是我的開發筆記的網誌,如果你對我的文章有任何疑問或者有錯誤的話,歡迎留言讓我知道。