為 Windows Form 自動設定等待游標

0 comments
在 Windows Form 應用程式中,我們通常會透過變換不同的滑鼠游標形狀(例如沙漏形狀的等待游標),來回應需要使用者等待處理完成的請求,直到處理完成再將游標恢復為預設狀態為止。

為達此目地,一般會在可能需要等待處理的程序中,先將表單的 Cursor 屬性設為 Cursors.WaitCursor,並在作業完成時再將其設為 Cursors.DefaultCursor。同時,為了避免因執行階段的異常情況(Exception)而導致游標狀態異常,會將重設游標的程式碼置於例外處理陳述式的 Finally 區塊中,以確保游標會回復成正常狀態。

雖然,控制游標的作法很簡單,但撰寫仍略嫌瑣碎,如果透過自訂實作 IDisposable 介面的類別,來封裝變更、重設游標的細節,便可讓程式碼更為簡潔,如以下範例:
using(new WaitCursor()) {
//... some long-running code here
}

採用此實作方式,或許會讓你覺得事情已經簡單到不能再簡單了,但事實上,AutoWaitCursor 類別提供了更佳的實現方法。它會自動偵測表單應用程式是否處於忙碌狀態(停止回應),若忙碌逾指定的 Delay 時間(預設為 25 毫秒),則會自動顯示忙碌游標(預設為等待游標),直到應用程式恢復閒置後重設狀態。你只需在表單建構式中,加入少量的程式碼,便可以為你表單應用程式自動設置等待游標的功能,如以下範例:
AutoWaitCursor.MainWindowHandle = this.Handle;
AutoWaitCursor.Start();

值得注意的是,如果你的表單應用程式使用多執行緒,除非表單的主執行緒被封鎖,否則游標將不會自動改變。

參考資料:
Automatically setting the wait cursor for an application

繼續閱讀...