2010-06-09 46 views
4

我的Windows窗體應用程序中有一個DataGridView控件。 我正在使用後臺線程向網格添加行。當流程開始時,我將表單的光標更改爲Waitcursor,並在結束時將其更改爲Default。這適用於表格,但不適用於網格。當窗體的光標變回默認狀態時,雖然表單其餘部分的光標會保持不變,但網格的光標不會改變。Datagridview從線程更新時保留waitcursor

這是否與我從後臺線程更新網格的事實有關? (遊標直接從UI線程更改)。

編輯:後臺進程引發一個事件,處理程序檢查網格的InvokeRequired屬性,並決定是否需要再次從主線程調用該方法。所以,實際的UI更新實際上是從適當的線程發生的。我不確定這是否意味着我「使用後臺線程」。 :|

+0

你不應該改變用戶界面,在你的情況下,網格,從其他線程。這應該只能從主線程完成。 – 2010-06-09 19:09:12

回答

6

我已經有一些問題做單線程更新我的datagrids,其中數據網格沒有重置爲正常光標後,我有waitcursor爲真。 我所做的就是之後我去

this.UseWaitCursor = false; 

我加

DatagridviewFoo.Cursor = this.Cursor; 

也許你

2

我有這個問題,以及只是同樣的問題。追查原因很困難,更不用說解決方案了。

只有當我在DGV控件上有一個對話框並且鼠標單擊了一個按鈕以關閉該框以使該框關閉時,鼠標位於(可調整大小)列邊框上時,纔會發生此問題。如果光標結束了一個單元格,問題就沒有出現。如果我不得不猜測,只要關閉對話框時沒有正確處理,網格就會看到列大小調整事件。

使用Cursor.Current = Cursors.Default解決了我的問題(不需要顯式重置控件的光標)。但是也許可以注意到,即使在顯式控制光標重置的情況下,Application.UseWaitCursor = False也不起作用。

1

我有類似的問題,但沒有發佈的解決方案爲我工作。礦井不是通過點擊可移動柱分離器上方的按鈕造成的。它只是在打開和關閉對話框後隨機發生的。我很確定它是由於.Net/Windows在設置遊標和實際生效時遇到了問題。爲了克服這個問題,我們用來顯示和隱藏等待遊標的庫 - ack! - Application.DoEvents。我在OnCursorChanged中設置了一個斷點,並且看到有時實際上在對Application.DoEvents(用於在等待文件系統釋放文件上的寫入鎖時保持UI響應)的後一次調用時設置了光標。所以我想有時候在設置等待光標的調用已經完全生效之前,默認光標已經開啓了。無論如何,我的蠻力方法是調用

Cursor = Cursors.Default; 

在我OnCellEnter的補償(網格被刷新之後,總是會發生以下對話框被關閉)。我對此並不是特別自豪,但它似乎有效。