WPF 确保 RenderTargetBitmap 已更新来自后台线程更改的绑定值

WPF Ensure RenderTargetBitmap has updated Binding values from background thread changes

我在使用 RenderTargetBitmap 时遇到问题,因为在后台线程上更改绑定属性后,我无法始终如一地获取更新的渲染。

这是我的资料:

        // Update a property on an INotifyPropertyChanged view model
        // This runs on a background thread
        viewModel.SomeBoundProperty += 10;

        // Flush dispatcher queue (from 
        _lcd.Dispatcher.Invoke(() => {}, System.Windows.Threading.DispatcherPriority.Loaded);

        // Render the updated control
        _lcd.Dispatcher.Invoke(() =>
        {
            _lcd.Measure(new System.Windows.Size(240, 160));
            _lcd.Arrange(new System.Windows.Rect(0, 0, 240, 160));
            _lcd.UpdateLayout();

            _renderTarget.Render(_lcd);
        }

唉,大约一半的时间我在用新值更新控件之前获得渲染,而另一半它正确更新。

据我了解,WPF 会自动将 属性 更改通知分派给 UI 线程。如何确保在进行渲染之前处理完这些已发送的通知?如果我确保 SomeBoundProperty 在 Dispatcher 线程上更新,此代码工作正常,但这对于这个特定应用程序来说不太理想。

有什么建议吗?

一些尝试和错误让我发现 属性 更改通知以 DispatcherPriority.Background 优先级发送,因此将刷新行更改为:

// Flush dispatcher queue 
_lcd.Dispatcher.Invoke(() => {}, System.Windows.Threading.DispatcherPriority.ContextIdle);

...看起来问题已解决。 DispatcherPriority.ContextIdleDispatcherPriority.Backgound 低一级。渲染现在每次都一致更新。