2016-06-30 3 views
1

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); 

...それは問題を修正以下のようになります。

答えて

0

いくつかの試行錯誤は私は、プロパティの変更通知がそのようにこれにフラッシングラインを変更し、DispatcherPriority.Background優先度で派遣されていることを把握しています。 DispatcherPriority.ContextIdleは1レベル下のDispatcherPriority.Backgoundです。レンダリングは毎回一貫して更新されます。

関連する問題