BitmapImage
is 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 Freeze
it.
Makes the current object unmodifiable and sets its IsFrozen property to true.
What you need to do is call Freeze
before you update Image
:
bi.BeginInit();
bi.StreamSource = ms;
bi.EndInit();
bi.Freeze();
Dispatcher.CurrentDispatcher.Invoke(() => Image = bi);
as pointed out by @AwkwardCoder here is Freezable Objects Overview