为什么像这样将对象实例传递给 UI 线程会导致 delays/hang 上升?
Why does passing an object instance to the UI thread like this cause delays/hang ups?
我在 UI 框架中实现了以下回调方法:
private void OnSystemMessage(string senderId, SystemMessage msg)
{
Application.Current.Dispatcher.Invoke(() =>
{
ActivityLog.Add(msg);
});
}
OnMessage 可以由不同于 UI 的线程调用。但是,第一次调用它需要几秒钟。稍后不再观察到相同的延迟。我不明白为什么会这样。
ActivityLog
是一个 ObservableCollection
,UI 线程是我的 WPF 应用程序之一。
是否有更好的方法来实现相同的目标?
谢谢
所以当您第一次调用 OnSystemMessage 时,很可能 UI 线程正忙于某事。例如,您可能会在应用程序启动时记录一些消息,而应用程序正忙于界面的初始加载。那么这个调用可能会延迟一点。由于您只是登录此方法 - 使用非阻塞 BeginInvoke 调用。
我在 UI 框架中实现了以下回调方法:
private void OnSystemMessage(string senderId, SystemMessage msg)
{
Application.Current.Dispatcher.Invoke(() =>
{
ActivityLog.Add(msg);
});
}
OnMessage 可以由不同于 UI 的线程调用。但是,第一次调用它需要几秒钟。稍后不再观察到相同的延迟。我不明白为什么会这样。
ActivityLog
是一个 ObservableCollection
,UI 线程是我的 WPF 应用程序之一。
是否有更好的方法来实现相同的目标?
谢谢
所以当您第一次调用 OnSystemMessage 时,很可能 UI 线程正忙于某事。例如,您可能会在应用程序启动时记录一些消息,而应用程序正忙于界面的初始加载。那么这个调用可能会延迟一点。由于您只是登录此方法 - 使用非阻塞 BeginInvoke 调用。