【发布时间】:2015-09-09 09:58:04
【问题描述】:
我在 UI 框架中实现了以下回调方法:
private void OnSystemMessage(string senderId, SystemMessage msg)
{
Application.Current.Dispatcher.Invoke(() =>
{
ActivityLog.Add(msg);
});
}
OnMessage 可能由不同于 UI 线程的调用。但是,第一次调用它需要几秒钟。后来,同样的延迟不再可观察到。我不明白为什么会这样。
ActivityLog 是ObservableCollection,UI 线程是我的 WPF 应用程序之一。
是否有更好的方法来实现相同的目标?
谢谢
【问题讨论】:
-
不清楚标题中的“移动对象实例”是什么意思……没有这样的概念。也许延迟是由于加载 UI 资源或类似的原因?没有更多信息很难知道。 (您需要 Invoke,还是 BeginInvoke 适合您?)
-
抱歉,我的意思是在第一次调用
OnSystemMessage时会导致延迟。你提出的BeginInvoke实际上可能已经回答了这个问题:我可能有一个阻塞条件,BeginInvoke 可能工作得很好。 -
@JonSkeet,谢谢你的建议,乔恩。它解决了我的问题。
-
@MattWolf 您可以致电Dispatcher.CheckAccess() 来检查您是否需要
Invoke.... -
@m0sa,很有趣,感谢您的指点
标签: c# multithreading user-interface task marshalling