我有一個綁定到數據表的wingrid。我創建一個新的異步線程,並從該線程進行遠程服務器調用,傳遞數據表。服務器通話完成後,wingrid將自動刷新以顯示任何更改。但是,由於這不是在程序的主UI線程上完成的,我們經常會在控件出現亂碼並出現大紅色X時出現錯誤。Infragistics - 當數據源發生變化時禁用ultrawingrid自動更新
是否有一個標誌來設置wingrid在數據源更改時不自動上移?我想在遠程服務器調用之前將其關閉,並在主線程中重新打開它。
我有一個綁定到數據表的wingrid。我創建一個新的異步線程,並從該線程進行遠程服務器調用,傳遞數據表。服務器通話完成後,wingrid將自動刷新以顯示任何更改。但是,由於這不是在程序的主UI線程上完成的,我們經常會在控件出現亂碼並出現大紅色X時出現錯誤。Infragistics - 當數據源發生變化時禁用ultrawingrid自動更新
是否有一個標誌來設置wingrid在數據源更改時不自動上移?我想在遠程服務器調用之前將其關閉,並在主線程中重新打開它。
的解決方案是異步方法之前,使用
Grid1.BeginUpdate()
。這種方法阻止網格繪畫。然後在完成異步方法後,在UI線程上使用
Grid1.EndUpdate()
。
我想你想要的是:
Grid1.SuspendRowSynchronization()
然後,在完成時:
Grid1.ResumeRowSynchronization()
這沒有奏效。我在數據表中添加並更新了行,並且網格仍顯示出這些變化 – briddums 2012-01-04 22:21:26
這很奇怪。根據Infragistics文檔(http://help.infragistics.com/Help/NetAdvantage/WinForms/2011.2/CLR2.0/html/Infragistics2.Win.UltraWinGrid.v11.2~Infragistics.Win.UltraWinGrid.UltraGridBase~SuspendRowSynchronization。 HTML),這不應該發生。這聽起來像是一個可能的錯誤在控制。 – 2012-01-04 22:27:11
這隻能防止繪畫。最好的方法是始終更新UI線程上的DataTable,因爲沒有任何方法可以阻止網格或任何綁定控件接收通知,並且這仍然從後臺線程更新控件,這可能會導致問題,因爲只有幾個線程安全的Control成員。有關線程安全性的更多詳細信息,請參閱MSDN上Control的「線程安全」部分:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.aspx – alhalama 2012-01-05 16:54:34
也可以使用像'PostSharp'這樣的免費庫或許可以幫助它的'[ThreadSafeMethod]'? – Prokurors 2016-08-05 09:15:35