2010-09-11 119 views
0

我正在使用DataGridView控件的應用程序。由於有很多數據我使用VirtualMode來使用分頁,但即使使用此功能,需要花一些時間來更新DataGridView。所以我創建了一個控制旋轉和娛樂用戶。不幸的是,這個解決方案存在一些問題,即娛樂控制旋轉UI時,線程會處理來自它的任何請求,因爲它非常忙於此DataGridView。DataGridView阻止UI線程

即使它太忙,我應該怎麼做才能訪問UI線程? 如何在使用DataGridView時「娛樂」用戶或者是否存在阻止DataGridView阻止UI線程的主線?

btw。我知道Application.DoEvents可能會有所幫助,但我不想使用它。

回答

0

刪除DataGridView線程相對於UI的優先級,或者只是偶爾在DGV數據加載函數中引入Thread.Sleep。

結合對應該對頁面大小進行排序的小調整。

+0

嗨,謝謝你的回答,你能解釋一下你的意思是說「放棄DataGridView線程相對於UI的優先級」,我該如何實現這種效果? – Jarek 2010-09-11 22:16:15

0

我不確定你的實現是什麼樣的,所以請原諒我,如果你已經知道這一點:將VirtualMode屬性設置爲「true」不會使DataGridView通過即時加載自動填充。相反,它只是讓開發者有能力這樣做。如果你使用的是虛擬模式,但仍然一次填充整個事物,那麼你真的沒有獲得任何東西。相反,你必須實現你自己的分頁算法。這實際上很容易做到。例如,請看MSDN topic。希望這有助於!

+0

嗨凱文,謝謝你的答案。我沒有在主文章中指定,但我實際上提到了這個MSDN頁面。所以,我介紹了一個緩存,並將RowCount屬性設置爲小塊數據。這有幫助,但包含DataGridView控件的窗體仍然被凍結或阻塞。這是由於DGV控制字面佔據主/用戶線程的百分之百。最好的問候Jarek – Jarek 2010-09-12 05:37:58

+0

嗨Jarek,你有可能發佈代碼片段嗎?我使用DGV以虛擬模式顯示大量數據而沒有問題。雖然DGV確實有其他一些錯誤,但我不確定它是如何完全綁定UI線程的,除非在佈局被暫停的情況下發生了大量的數據綁定。 – 2010-09-12 20:00:52