Ich habe ein Problem mit RenderTargetBitmap, da ich es nicht konsistent holen kann, nachdem ich gebundene Eigenschaften in einem Hintergrundthread geändert habe.WPF Stellen Sie sicher, dass RenderTargetBitmap aktualisiert wurde Binding-Werte aus Hintergrundthreadänderungen
Hier ist, was ich habe:
// 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);
}
Ach, etwa die Hälfte der Zeit erhalte ich das machen, bevor die Steuerung mit dem neuen Wert aktualisiert wird, und die andere Hälfte es korrekt aktualisiert.
Von was ich verstehe, sendet WPF Property Change Benachrichtigungen automatisch an den UI-Thread. Wie kann ich sicherstellen, dass diese abgesendeten Benachrichtigungen vor dem Rendern verarbeitet werden? Dieser Code funktioniert gut, wenn ich sicherstellen, dass SomeBoundProperty
auf dem Dispatcher-Thread aktualisiert wird, aber das ist weniger als ideal für diese bestimmte Anwendung.
Irgendwelche Vorschläge?