У меня есть приложение WPF, которое выполняет некоторые вычисления в BackgroundWorker. Проблема в том, что когда я пытаюсь обновить свойство (которое вызывает NotifyPropertyChanged в установщике) в обработчике события RunWorkerCompleted, я получаю InvalidOperationException - The calling thread cannot access this object because a different thread owns it.
В этой статье MSDN говорится, что BackgroundWorker сам выполняет синхронизацию потоков, поэтому мне не нужно беспокоиться об использовании Dispatcher. Но я вижу, что он не обрабатывает NotifyPropertyChanged правильно.
Кто-нибудь может мне помочь с этим вопросом?
РЕДАКТИРОВАТЬ
Вот мой код (извините за некоторые несущественные функции):
backgroundWorker.DoWork += delegate(object sender, DoWorkEventArgs args)
{
var action = (Func<Bitmap>) args.Argument;
args.Result = BitmapUtil.BitmapSourceFromBitmap(action());
};
backgroundWorker.RunWorkerCompleted += delegate(object sender, RunWorkerCompletedEventArgs args)
{
if (args.Cancelled || (args.Error != null))
{
return;
}
ImageProcessed = (BitmapSource) args.Result;
};
...
public BitmapSource ImageProcessed
{
get { return imageProcessed; }
set
{
imageProcessed = value;
OnPropertyChanged(VMUtil.GetNameOf<ImageAnalyzerViewModel>(vm => vm.ImageProcessed));
}
}