2017-02-09 3 views
0

Я пытаюсь обновить ImageSource с изображением на время выполнения из другого потока затем в main_UI один, но по какой-то причине я получаю:
The calling thread cannot access this object because a different thread owns it.
Я попробовал несколько вещей, :C# WPF изменения ImageSource Изображение на тему

  • im_Cover.Dispatcher.Invoke(() => { if (im_Cover.Source != image) im_Cover.Source = image; });
  • Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => { im_Cover.Source = image; }));
  • Фиксация изображения (которое не было возможно). Я попытался добавить сообщение об ошибке и после появления ошибки, и я нажал ОК, по какой-то причине изображение загрузилось.
  • Пробовал использовать пользовательский загрузочный обработчик событий, который даже не срабатывал.

Вот мой код:

for (int i = 1; i < correctArtist.images.Count; i++) 
{ 
if (correctArtist.images[i].width > correctArtist.images[biggest].width) 
    biggest = i; 
} 
Image biggestImage = correctArtist.images[biggest]; 
var imgUrl = biggestImage.url; 

image = new BitmapImage(new Uri(imgUrl)); 


bool uiAccessCover = im_Cover.Dispatcher.CheckAccess(); 
if (uiAccessCover) 
{ 
    im_Cover.Source = image; 
} 
else 
{ 
    //im_Cover.Dispatcher.Invoke(() => { if (im_Cover.Source != image) im_Cover.Source = image; }); 
    Application.Current.Dispatcher.BeginInvoke(DispatcherPriority.Background, new Action(() => { im_Cover.Source = image; })); 
} 

И по какой-то причине этого: lb_Song.Dispatcher.Invoke(() => { if ((string)lb_Song.Content != song) lb_Song.Content = song; }); работает.

Любая идея, почему это не работает, и как я могу это исправить?

ответ

2

Перед передачей BitmapImage из фоновой нити в поток пользовательского интерфейса, например.

im_Cover.Dispatcher.BeginInvoke(new Action(() => im_Cover.Source = image)); 

это обязательно быть заморожены. В противном случае он также должен быть создан на резьбе UI, например

im_Cover.Dispatcher.BeginInvoke(new Action(() => 
    im_Cover.Source = new BitmapImage(new Uri(imgUrl)))); 
+0

Вы, сэр, спасатель. Благодаря!! – Remco1250

Смежные вопросы