为什么像这样将对象实例传递给 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 调用。