我有一個WPF應用程序,顯示一個ObservableCollection。它大約有182行,集合中的對象(我們稱之爲PositionLight)有大約70個屬性可以顯示。GUI凍結,而我更新我的ObservableCollection
所有計算這些性質的輸入數據在第二個線程將重計算的一切,每20個secondes,並將列表發送到WPF窗口,THX一個事件製成。這種計算不會減慢GUI。
這份名單是在與該事件的GIU發送的EventArgs的構造一個ObservableCollection轉化。
的問題是,即使我使用的BeginInvoke和委託辦:
myGUICollection = myEventArgsCollection
的圖形用戶界面將被凍結3到4秒......我已經投入了很多的Console.Writeline找出瓶頸在哪裏,但看起來凍結會在它離開BeginInvoke調用的函數後發生。我真的迷失在這裏。
我使用的是2.5Go RAM 4核PC,所以我不認爲這是一個硬件問題。
你們是否有一個想法?
一些代碼來給你在GUI中插入一個更好的主意:
public bool myCoreScope_OnCoreCalculationHandler(object myObject, CoreCalculationEventArgs myEventArgs)
{
foreach (PositionLight item in myEventArgs.MyPositionList)
{
lv.Dispatcher.BeginInvoke(new DisplayPositionItemCallBack(DisplayPositionItem), DispatcherPriority.Send, new object[] { item });
}
}
private delegate void DisplayPositionItemCallBack(PositionLight item);
private void DisplayPositionItem(PositionLight item)
{
try
{
MyPositionList.Remove(MyPositionList.First(position => position.ID== item.ID));
}
catch (Exception)
{ }
MyPositionList.Add(item);
}
發佈一些更多的代碼來分析 – TalentTuner 2010-10-21 10:39:15
@saurabh:done。我考慮了Fara所說的,但仍然以相同的凍結時間結束 – Gregfr 2010-10-22 04:00:09