2016-06-30 6 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 스레드에서 업데이트되었지만이 특정 응용 프로그램에 이상적이지 않은 경우이 코드는 올바르게 작동합니다.

제안 사항?

답변

0

일부 시행 착오 나 속성 변경 알림이 때문에이에 플러싱 라인을 변경의 DispatcherPriority.Background 우선 순위로 파견되어 있는지 파악하고있다 :이 문제를 해결 같은

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

이 ... 보인다. DispatcherPriority.ContextIdle은 한 수준 아래 DispatcherPriority.Backgound입니다. 렌더링은 매번 일관되게 업데이트됩니다.