1

バックグラウンド スレッドでバインドされたプロパティを変更した後、更新されたレンダリングを一貫して取得できないという点で、RenderTargetBitmap に問題があります。

ここに私が持っているものがあります:

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

        // Flush dispatcher queue (from http://stackoverflow.com/a/2596035/612510)
        _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 スレッドに自動的にディスパッチします。レンダリングを実行する前に、これらのディスパッチされた通知がすべて処理されるようにするにはどうすればよいですか? Dispatcher スレッドで更新されていることを確認すれば、このコードは正常に機能しSomeBoundPropertyますが、この特定のアプリケーションには理想的とは言えません。

助言がありますか?

4

1 に答える 1

1

いくつかの試行錯誤の結果、プロパティの変更通知がDispatcherPriority.Background優先的にディスパッチされることがわかったので、フラッシュ行を次のように変更します。

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

...問題が解決したようです。DispatcherPriority.ContextIdleは一段下DispatcherPriority.Backgoundです。レンダリングが毎回一貫して更新されるようになりました。

于 2016-06-30T14:50:45.100 に答える