[英]Datagridview retains waitcursor when updated from thread
我的Windows窗體應用程序中有一個DataGridView控件。 我正在使用后台線程向網格添加行。 我在進程啟動時將表單的光標更改為Waitcursor,並在結束時返回Default。 這適用於表單,但不適用於網格。 當窗體的光標變回默認值時,網格的光標不會改變,盡管光標在窗體的其余部分上也是如此。
這與我從后台線程更新網格這一事實有什么關系嗎? (光標正在直接從UI線程更改)。
編輯:后台進程引發一個事件,處理程序檢查網格的InvokeRequired屬性,並決定是否需要從主線程再次“調用”該方法。 實際上,實際的UI更新是從適當的線程發生的。 我不確定這是否意味着我“正在使用后台線程”。 :|
我在使用datagrids進行單線程更新時遇到了一些問題,在我將waitcursor設置為true之后,datagrid沒有重置為正常游標。 我去了之后就做了什么
this.UseWaitCursor = false;
我補充道
DatagridviewFoo.Cursor = this.Cursor;
也許這對你來說也是同樣的問題
我也遇到過這個問題。 很難追查原因,更不用說解決方案了。
這個問題只發生在DGV控件上有一個對話框,鼠標點擊一個按鈕關閉盒子時,當盒子關閉時,鼠標位於(可調整大小的)列邊框上。 如果光標在單元格上方結束,則不會出現問題。 如果我不得不猜測,我會說一旦對話框關閉而沒有正確處理,網格就會看到一個列調整大小事件。
使用Cursor.Current = Cursors.Default
解決了我的問題(無需顯式重置控件的光標)。 但也許要注意,即使使用顯式控制光標重置, Application.UseWaitCursor = False
也不起作用。
我遇到了類似的問題,但是發布的解決方案都沒有對我有用。 單擊可移動柱分隔器上方的按鈕不會導致損壞。 它只是在打開和關閉對話框后隨機發生的。 我很確定它歸結為計時,因為.Net / Windows在設置游標並實際讓它們生效方面存在問題。 為了嘗試克服這個問題,我們用於顯示和隱藏等待光標的庫調用 - 確認! - Application.DoEvents。 我在OnCursorChanged中設置了一個斷點,並且看到光標有時實際上是在后一次調用Application.DoEvents時設置的(用於在等待文件系統釋放文件寫鎖時保持UI響應)。 所以我猜有時默認光標會在設置等待光標的調用完全生效之前重新打開。 無論如何,我的蠻力方法是打電話
Cursor = Cursors.Default;
在我的OnCellEnter覆蓋中(在關閉對話框后刷新網格后總會發生)。 我對此並不特別自豪,但它似乎有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.