我有一個場景,其中有一組綁定到winforms中的數據網格的對象。如果用戶將一個項目拖放到網格上,我需要在網格中添加一個佔位符行,並啓動冗長的異步導入過程。我需要將異步導入過程的狀態反饋回UI,更新網格中的行,並讓UI保持響應以允許用戶編輯其他行。WinForms中的數據綁定執行異步數據導入
這樣做的最佳做法是什麼?
我目前的解決方案是:將thread safe implementation of BindingList綁定到網格,並填充在網格中顯示爲行的對象。當用戶將一個項目拖放到網格上時,我創建了一個新對象,其中包含從已刪除項目獲取的稀疏信息,並將其添加到BindingList,禁用該行的編輯。然後我引發一個單獨的線程來執行導入操作,將剛剛創建的新綁定對象傳遞給它以填充數據。導入過程定期設置對象的狀態並觸發UI訂閱的事件,告訴它刷新網格以查看對象上的新屬性。
我是否應該將綁定到網格的同一對象傳遞給導入進程線程進行操作,還是應該使用BeginInvoke創建副本並將對UI線程上對象的更改合併到一起?
此實施有何問題或建議?
感謝
如果不知道更多關於BindingList中包含的對象的性質的信息,真的很難說。 他們自己也是線程安全的嗎?如果是這樣,費用是多少?它們只是一組普通的字段,還是存在一些複雜的數據結構,如列表和樹?在前一種情況下,您可以保持原樣:它是「一個作者,一個讀者」的情況,應該是線程安全的。在後一種情況下,取決於您如何確保線程安全:它可能會產生顯着的性能損失。無論如何,請告訴更多關於這些物體的信息,然後它會更容易分辨。 –