2010-08-05 52 views
0

只是想知道什麼最好的方法是這種情況下 - 試圖綁定到另一個後臺線程正在填充的集合。數據綁定數據仍然在另一個線程在wpf處理

我的後臺線程將項目添加到處理循環中的集合中,該循環可能會運行幾分鐘。每隔一段時間,它都會向用戶界面引發一個事件,並傳遞對集合中數據的引用,讓用戶界面可視化(以便用戶可以開始與他們所擁有的內容進行交互)並進行處理。

問題是用戶界面開始呈現可視化(這本身非常複雜),它涉及到數據集合上的foreach()循環,可以理解的是,如果我的後臺線程更改集合中的數據在枚舉期間。

所以,我的頭腦風暴已經是這樣的:

  1. 暫停後臺線程;但我真的不想暫停
  2. 將所有或每個事件中的某些數據的重複快照副本以及數據綁定到快照。可能會使內存使用量翻倍,但可能會工作
  3. 在同步根節點或任何集合上實現某種鎖定,因此在UI更新後臺進程時必須等待。不自信有關工作仍
  4. 火災的事件所有的時間,只是通過一個數據位的時間,它具有相同的結果,#2,但更多的開銷..

歡呼 尤爾特。

回答

0

解決問題的最簡單方法是將foreach循環更改爲for循環,該循環從0循環到集合中的項目數,然後開始循環。而不是

var coll = new List<string>(); 
    foreach (string item in coll) 
    { 
     //do your stuff 
    } 

使用:

var coll = new List<string>(); 
    int length = coll.Count - 1; 
    for (int i = 0; i < length; i++) 
    { 

    } 

OR

我不知道你的UI是多麼複雜,但與WPF可以將代碼幾乎總是改爲先進綁定到ObservableCollection的數據綁定。 Observable集合在添加或刪除項目時觸發綁定的更新。 但爲了提供一個解決方案,需要大量關於如何構建UI的信息。