DependencyObject so it does matter on which thread it has been created because you cannot access
DependencyProperty of an object created on another thread unless it’s a
Freezable object and you can
Makes the current object unmodifiable and sets its IsFrozen property to true.
What you need to do is call
Freeze before you update
bi.BeginInit(); bi.StreamSource = ms; bi.EndInit(); bi.Freeze(); Dispatcher.CurrentDispatcher.Invoke(() => Image = bi);
as pointed out by @AwkwardCoder here is Freezable Objects Overview