我有一个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