RenderTargetBitmapに問題があります。バックグラウンドスレッドでバインドされたプロパティを変更した後に、常に更新されたレンダリングを取得できません。WPF RenderTargetBitmapがバックグラウンドスレッドの変更からBinding値を更新していることを確認してください
// 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スレッドにディスパッチすることを理解しています。レンダリングを行う前に、これらのディスパッチされた通知がすべて処理されるようにするにはどうすればよいですか?このコードは、SomeBoundProperty
がDispatcherスレッドで更新されていることを確認してもうまく動作しますが、この特定のアプリケーションにとって理想的ではありません。
提案がありますか?
// Flush dispatcher queue
_lcd.Dispatcher.Invoke(() => {}, System.Windows.Threading.DispatcherPriority.ContextIdle);
...それは問題を修正以下のようになります。