m506 Ответов: 1

Ошибка диспетчера потоков элементов Wpf


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

Это код:
rgbImage.Source = new BitmapImage(new Uri("/Images/Play.png", UriKind.Relative));


Это исключение ошибки:
Необработанное Исключение: Система.InvalidOperationException: вызывающий поток не может
получите доступ к этому объекту, потому что он принадлежит другому потоку.
в системе.Окна.Нарезание резьбы.Диспетчер.VerifyAccess()

Кто-нибудь может предложить какие-нибудь идеи?

Спасибо заранее

Что я уже пробовал:

Я попробовал несколько различных методов, чтобы получить доступ к диспетчеру, на котором был создан этот элемент, но я не могу ради меня выполнить эту единственную строку. Что я уже пробовал:

Система.Окна.Приложение.Текущий.Диспетчер.Invoke(new Action(() =>
{
rgbImage.Источник = новый объект bitmapimage(новый URI("/изображения/игры.ПНГ", параметре urikind.Родственник));
})); / / та же ошибка

rgbImage.Диспетчер.Invoke(new Action(() =>
{
rgbImage.Источник = новый объект bitmapimage(новый URI("/изображения/игры.ПНГ", параметре urikind.Родственник));
})); / / замораживает приложение

1 Ответов

Рейтинг:
0

Richard Deeming

Попробуйте использовать BeginInvoke вместо.
Диспетчер.Метод BeginInvoke (System.Окна.Нарезание резьбы)[^]

rgbImage.Dispatcher.BeginInvoke(new Action(() =>
{
    rgbImage.Source = new BitmapImage(new Uri("/Images/Play.png", UriKind.Relative));
}));

Если изображение не обновляется немедленно, значит, что-то блокирует поток пользовательского интерфейса. Вы заблокировали поток пользовательского интерфейса, ожидая завершения фонового потока?


m506

спасибо, это может помочь запустить код асинхронно. с уважением