2012-02-29 122 views
3

使用Application.UseWaitCursor來關閉沙漏鼠標指針會有什麼危險嗎?應該使用Application.UseWaitCursor嗎?

+0

請參閱http://stackoverflow.com/questions/302663/cursor-current-vs-this-cursor-in-net-c/302865#302865 – 2012-02-29 11:28:20

+0

您對下方評論中提出的問題的迴應是什麼?這個問題呢? – CJ7 2012-02-29 11:31:24

+0

我沒有看到問題,有人剛從錯誤的線程中使用了這個類。等待遊標的更典型用法是當*不使用線程時。 – 2012-02-29 11:46:38

回答

6

「危險」是不恢復光標。

你可以用try…finally塊這樣做是爲了確保即使拋出一個異常,你恢復光標,或者在實現IDisposable這樣就可以使用using塊,而不是一類包裝此功能清理語法有點。

public class WaitCursor : IDisposable 
    { 
    public WaitCursor() 
    { 
     Application.UseWaitCursor = true; 
    } 

    public void Dispose() 
    { 
     Application.UseWaitCursor = false; 
    } 
    } 

用法:

using (new WaitCursor()) 
    { 

    // do stuff - busy, busy, busy 

    } // here the cursor will be restored no matter what happened 
2

如果應用程序將被鎖定,直到長時間運行的操作完成,這將是正確的使用Application.UseWaitCursor。但是,如果您有多個表單只鎖定一個表單,最好在表單上設置Cursor屬性。

您還應該記住將Application.UseWaitCursor = false;置於finally塊中,以確保在拋出應用程序異常的情況下重置遊標。

+0

將窗體上的光標設置不起作用,文本框控件將覆蓋它。這實際上是財產首先存在的原因。 – 2012-02-29 11:26:53

+0

是的,這是正確的,但僅適用於啓用的控件。如果您有一個鎖定表單的長時間運行流程,則還需要禁用輸入數據的可能性。例如。將所有控件放在可在處理過程中禁用(Enable = false;)的面板中。 – 2012-02-29 11:38:14