4

I have a WPF control that is bound to properties in my ViewModel. To my surprise (as this doesn't seem like a well-advertised feature of WPF), there seem to be no issues with changing the bound properties from a background thread. My UI updates with no exceptions. Why is this? Are there any performance issues with updating a bound property from a background thread, or any other limitations?

H.B.
  • 166,899
  • 29
  • 327
  • 400
user981225
  • 8,762
  • 6
  • 32
  • 41

3 Answers3

2

WPF automatically ensures that bindings are updated on the main thread.

There's no performance hit. If anything it's better to do the property updates on the background thread. Dispatching updates to the main thread would increase the amount of work being done there. You would be updating both the View and the ViewModel, rather than just the View. The difference should normally be negligible, but if a lot of updates are happening rapidly then it might cause the UI's responsiveness to degrade more quickly.

Sean U
  • 6,730
  • 1
  • 24
  • 43
2

This is because WPF takes care about marshalling the binded data to UI thread. This works only for scalar data, as much as I know. For the collections, you have to take care about correct managing it between non UI and UI threads.

There is no notable overhead, as finally it should do the same thing you would do in multithreading (may be in slightly more optimized way).

Tigran
  • 61,654
  • 8
  • 86
  • 123
2

It depends.

It only "automatically" does this (IIRC) for bindings against properties that implement INotifyPropertyChanged. DependencyProperties and DependencyObjects have thread affinity and will throw if you try to update them from another thread.

The Binding class has a property called IsAsync which helps in some special cases when updating a property from another thread so that the update won't block the UI. You don't really need it until you do.