簡體   English   中英

保持UI線程空閑

[英]Keep UI Thread free

我有一個帶有兩個面板(頂部,底部)的表單,每個面板包含網格。 基本上,這是一個Master-Detail表單,其中從頂部網格中選擇一行將在底部網格中顯示詳細信息。

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

請注意,綁定並不意味着從數據源獲取數據。 由於實際綁定需要花費大量時間進行大量數據按摩,因此它花費的時間更長。 在細節網格進行綁定時,如何保持UI線程空閑?

太感謝了。

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

您可能可以通過使用某些控件上可用的諸如BeginUpdate / EndUpdate之類的方法來加快綁定速度,但是由於您未指定正在使用的內容,因此無法確定是否可用。

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

如果我是您,聽起來您正在處理很多數據,那么我會將所有“按摩”都分離到一個單獨的線程進程中。

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

最終,如果要花費這么長時間,您可能正在接近應用程序中的關鍵點,您需要手動執行代碼中需要做的事情,而不是使用.NET中的現成數據綁定功能。

終於我找到了解決方案。 該解決方案不包括多線程開始。 正如我所說的,延遲是在綁定網格(這意味着保持主線程)時,我們不能做太多事情。 因此解決方案是帶來延遲。 當用戶選擇主行時,計時器將計時一段時間。 如果在時間到期之前再次發出請求,計時器將重新啟動。 這是因為用戶單擊或選擇行的速度太快,所以我們忽略了所有調用。 計時器到期后,我進入所選行並顯示數據。 簡單而優雅的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM