Я создал элемент управления WPF, который отображает изображение. Теперь я хотел бы изменить это изображение с очень высокой скоростью. Я построил класс ImageContainer, который содержит изображение, и имеет ChangedEventHandler, который обновляет изображение в моем элементе управления при изменении.TargetInvocationException при обновлении изображения в WPF
код, который выполняется выглядит следующим образом:
videoImageThread = new Thread(
new ThreadStart(
delegate()
{
this.VideoCapture.Dispatcher.Invoke(
System.Windows.Threading.DispatcherPriority.Normal,
new Action(
delegate()
{
videoImage.Source = VideoImageContainer.Instance.VideoBitmapSourceImage;
}
));
}
));
private void Instance_VideoRefresh()
{
if (VideoImageContainer.Instance.VideoImage != null)
{
lock (videoImageSetLock)
{
videoImageThread.Start();
}
}
}
Этот код бросает System.Reflection.TargetInvocationException, что я делаю не так?
Может быть, потому что вы обращаетесь к диспетчеру, который принадлежит другому потоку? – Andres
Но это не так? Я не могу обновить элемент управления из потока, отличного от потока элементов управления, если я сделаю это, я получаю другое исключение. Вот почему у меня этот код, он вызван некоторым рабочим потоком и ссылками на поток управления. –
Посмотрите на свойство InnerException исключения, чтобы найти реальную причину. –