2015-09-02 51 views
0

我正在構建一個文檔管理系統,我試圖在文檔加載時將遊標更改爲「等待」遊標,非常標準。WPF Mouse.OverrideCursor不能像記錄文件一樣工作

按照MSDN文檔,我使用下面的代碼:

System.Windows.Input.Mouse.OverrideCursor = System.Windows.Input.Cursors.Wait; 
try 
{ 
    newPage.LoadForm(data); 
} 
finally 
{ 
    System.Windows.Input.Mouse.OverrideCursor = null; 
}  

的問題是,LoadForm完成後,光標不會恢復到正常狀態。我調試了程序,「null」行正在運行,所以我不知道問題是什麼。

任何想法?

+0

確保其他進程不會將遊標重新覆蓋爲「等待」。 –

+0

你在主線程上運行這個嗎? – vesan

+0

@vesan是的。出於某種原因,在代碼中進一步向下移動Override = null可以修復問題。我不知道爲什麼,但只要它的工作,我不介意在這一點上。 – Loocid

回答

0

替代方法

你必須將其設置爲遊標類型你想要的,而不是將其設置爲null。所以,而不是將其設置爲null,將其設置爲箭頭(我認爲這是你想要在正常狀態)。

所以在最終阻止這一替換代碼:

System.Windows.Input.Mouse.OverrideCursor = System.Windows.Input.Cursors.Arrow; 

編輯1:

嘗試在try塊的末尾設置光標爲空,如果萬一你不想使用解決方法。

+0

這是不正確的。將OverrideCursor設置爲空將其重置爲默認狀態。您不需要指定不同的遊標。 –

+1

@ColinGrealy:是的,我同意,這是一個解決方法。 – Ankit

1

如果這是一個長時間運行的操作,您可能會考慮將這整個代碼移到一個任務(儘管在這種情況下,您必須將更改發送到OverrideCursor屬性返回到主線程)。我使用睡眠模擬一個長期運行的應用程序並且它似乎很好地工作(我把這段代碼放在窗口的構造函數中的一個空的WPF應用程序中進行測試)。

Task.Factory.StartNew(() => 
    { 
     Application.Current.Dispatcher.Invoke(() => 
      System.Windows.Input.Mouse.OverrideCursor = System.Windows.Input.Cursors.Wait); 
     try 
     { 
      Thread.Sleep(5000); 
     } 
     finally 
     { 
      Application.Current.Dispatcher.Invoke(() => 
       System.Windows.Input.Mouse.OverrideCursor = null); 
     } 
    }); 
相關問題