2009-02-09 65 views
2

我有兩個面板(頂部,底部)的形式,每個面板包含網格。基本上,這是一個Master-Detail表格,從頂部網格中選擇一行將顯示底部網格中的細節。保持UI線程免費

將數據綁定到細節網格需要一些時間。由於綁定是在UI線程上完成的,因此它會阻塞線程,因此用戶無法從主網格中選擇另一行,直到綁定完成。

請注意,通過綁定我並不意味着從數據源獲取數據。這是實際的綁定需要更長的時間,因爲它做了大量的數據按摩。如何在細節網格進行綁定時保持UI線程可用?

非常感謝。

+0

加里:我的「M已經在做的BeginUpdate和EndUpdate – Sheraz 2009-02-09 17:29:12

回答

0

最後我找到了解決方案。該解決方案不包括多線程開始。正如我所說的那樣,延遲是在約束主要線索的網格上,我們做不了多少。所以解決方案是延遲。當用戶選擇主行時,計時器在特定時間內打勾。如果在時間到期之前發出另一個請求,則重新啓動計時器。這是我們忽略所有由於用戶點擊或選擇行太快而導致的調用。一旦計時器過期,我會選取所選的行並顯示數據。簡單優雅的解決方案。

1

你不能。 UI的更新必須在UI線程上執行。

您可以通過使用某些控件上提供的BeginUpdate/EndUpdate之類的東西來加速綁定,但是因爲您沒有指定正在使用的內容,所以我不能說這是否可用。

+0

加里, 這是Infragistics的網格 – Sheraz 2009-02-09 17:28:27

+0

我」米已經調用的BeginUpdate和EndUpdate – Sheraz 2009-02-09 17:32:07

0

您可以使用後臺線程來執行數據檢索,然後使用UI線程來顯示它。

+0

我得到的印象是,他已經這樣做了 – 2009-02-09 16:53:44

0

如果我是你,這聽起來像你正在處理大量的數據,並且我會將所有「按摩」分離成一個單獨的線程進程。

因此,例如,當創建主記錄時,您可以手動將後臺線程中的詳細數據旋轉到另一個數據集並進行按摩,然後將結果數據集綁定到網格。這樣,在UI線程上發生的唯一事情就是UI綁定。

最終如果需要這麼長時間,您可能正在接近您的應用程序中的一個關鍵點,您需要手動執行代碼中所需的操作,而不是使用.NET中開箱即用的數據綁定功能。