How do you pass a BitmapImage from a background thread to the UI thread in WPF?
Posted
by DanM
on Stack Overflow
See other posts from Stack Overflow
or by DanM
Published on 2010-06-14T04:00:48Z
Indexed on
2010/06/14
4:12 UTC
Read the original article
Hit count: 302
I have a background thread that generates a series of BitmapImage
objects. Each time the background thread finishes generating a bitmap, I would like to show this bitmap to the user. The problem is figuring out how to pass the BitmapImage
from the background thread to the UI thread.
This is an MVVM project, so my view has an Image
element:
<Image Source="{Binding GeneratedImage}" />
My view-model has a property GeneratedImage
:
private BitmapImage _generatedImage;
public BitmapImage GeneratedImage
{
get { return _generatedImage; }
set
{
if (value == _generatedImage) return;
_generatedImage= value;
RaisePropertyChanged("GeneratedImage");
}
}
My view-model also has the code that creates the background thread:
public void InitiateGenerateImages(List<Coordinate> coordinates)
{
ThreadStart generatorThreadStarter = delegate { GenerateImages(coordinates); };
var generatorThread = new Thread(generatorThreadStarter);
generatorThread.ApartmentState = ApartmentState.STA;
generatorThread.IsBackground = true;
generatorThread.Start();
}
private void GenerateImages(List<Coordinate> coordinates)
{
foreach (var coordinate in coordinates)
{
var backgroundThreadImage = GenerateImage(coordinate);
// I'm stuck here...how do I pass this to the UI thread?
}
}
I'd like to somehow pass backgroundThreadImage
to the UI thread, where it will become uiThreadImage
, then set GeneratedImage = uiThreadImage
so the view can update. I've looked at some examples dealing with the WPF Dispatcher
, but I can't seem to come up with an example that addresses this issue. Please advise.
© Stack Overflow or respective owner