В приложении WPF, которое я пишу, у меня есть свойство TransformedBitmap, которое связано с объектом Image в пользовательском интерфейсе.Всякий раз, когда я изменяю это свойство, изображение обновляется (и, таким образом, изображение, отображаемое на экране, обновляется).Чтобы пользовательский интерфейс не зависал или не отвечал на запросы во время получения следующего изображения, я пытаюсь получить снимок с помощью BackgroundWorker, например:
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
e.Result = this.snapshotHelper.GetSnapshot(ImageFormat.Bmp);
}
, затем в моем методе RunWorkerCompleted яследующее:
private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
this.CurrentImage = (TransformedBitmap)e.Result;
....
}
Кажется, что это работает нормально до тех пор, пока не будет использован метод NotifyPropertyChanged, используемый для указания объекту Image обновляться при обновлении свойства CurrentImage;Я получаю ошибку в нескольких потоках.
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String info)
{
if (PropertyChanged != null)
{
//The following causes a "the calling thread cannot access this object because a different thread owns it" error!
PropertyChanged(this, new PropertyChangedEventArgs(info));
}
}
Я действительно не знаю, как что-то изменить или что сделать по-другому, чтобы обойти эту ошибку.Последние пару часов я читал о BackgroundWorkers, и мне кажется, что у меня должна быть возможность правильно настроить CurrentImage в методе RunWorkerCompleted;по крайней мере из того, что я могу сказать.Любая помощь по этому вопросу будет принята с благодарностью!Спасибо!