簡體   English   中英

分配數據源時避免UI鎖定/凍結?

[英]Avoid UI locking/freezing when assigning datasource?

我使用的是MVP模式,所以我有一個幾乎沒有邏輯的視圖和一個演示者,該演示者知道如何對用戶與視圖的交互做出反應。 每當我需要從服務中獲取數據或者我的代碼如此異步地執行時,我遇到的問題是,當我分配這些數據時,我得到了10,000個需要數據綁定到Grid的數據(通過UI進行編組)線程)我的UI鎖定了很短的時間(因為Grid Control / CurrencyManager鎖定了我認為的線程)

有人知道避免這種情況的可能方法嗎?

我嘗試使用計時器按增量塊分配數據,但仍然會導致UI隨機凍結

干杯

您需要在后台線程上以塊為單位從服務器下載數據,然后將它們附加到客戶端收集對象。 如果該集合對象實現INotifyCollectionChanged,網格應自動更新。 您可以使用ObservableCollectionBindable Linq來獲得,這可能是一個更好的選擇。

您將遇到的問題是,您的網格會一遍又一遍地重新繪制10,000個項目。 通常,這不是一個好的解決方案,但是如果您使用UI Virtualization獲得網格,它就可以工作。 例如,我使用Telerik GridView控件,並獲得了大約5000條記錄,效果很好。

嘗試直接回答您的問題后,讓我給您一些建議,可能會帶您朝一個更好的方向發展。 無論您的網格控件有多酷,通過網絡直接查詢10,000個項目都不會很快。 您可能需要考慮使用服務總線與服務器進行異步通信並將數據副本存儲在本地數據庫中。 我正在做一個項目,該項目將使用Rhino Service Bus制作一個即使網絡連接中斷很短時間也可以工作的智能客戶端 用於智能客戶端開發的服務總線方法應消除UI鎖定的煩惱,並使您的應用程序更穩定,對網絡流量具有彈性。

您應該為網格使用某種虛擬數據模型 這將徹底消除此類問題。

暫無
暫無

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

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