Хорошо, у меня есть объект изображения wpf, и он отображает живые изображения. Поэтому я использовал таймер для обновления изображения.Проблемы с визуализацией WPF
public void LoadLiveImage()
{
System.Windows.Media.PixelFormat pf = PixelFormats.Bgr24;
int stride = 4 * ((24 * cameraFrame.img_width + 31)/32);
BitmapSource bmpImage= BitmapSource.Create(cameraFrame.img_width, cameraFrame.img_height, cameraFrame.img_width, cameraFrame.img_height, pf, null, cameraFrame.img_pixel, stride);
RemoteCameraImage.Source = bmpImage;
}
void dispatcherTimer_Tick(object sender, EventArgs e)
{
LoadLiveImage();
}
Нет проблем, это нормально работает. Однако я попытался переместить это в поток, и изображение не отображается.
private void showLiveImage()
{
while (this.isCameraViewOpen)
{
if (RemoteCameraImage.Dispatcher.CheckAccess())
{
System.Windows.Media.PixelFormat pf = PixelFormats.Bgr24;
int stride = 4 * ((24 * cameraFrame.img_width + 31)/32);
BitmapSource bmpImage = BitmapSource.Create(cameraFrame.img_width, cameraFrame.img_height, cameraFrame.img_width, cameraFrame.img_height, pf, null, cameraFrame.img_pixel, stride);
RemoteCameraImage.Source = bmpImage;
System.Threading.Thread.Sleep(5);
}
else
this.RemoteCameraImage.Dispatcher.Invoke(DispatcherPriority.Normal, new ImageUpdater(this.showLiveImage));
}
}
ShowLiveImage ispunning как нить. Изображение получено, в этом нет проблем. Я протестировал, сохранив массив img_pixel в файле bmp, и файл сгенерирован. Просто изображение не отображается. Поэтому я помещаю сообщение, которое будет показано после назначения источника, и затем я смогу увидеть изображение на объекте Image. Я думаю, что проблема в том, что я увеличил время сна, но даже изображение не обновляется. В чем может быть проблема?
EDIT: После перемещения кода, который обновлял изображение до другой функции, он отлично работает. И я использовал BeginInvoke() вместо того, чтобы вызывать все работает отлично.
Проблема не в том, что диспетчер не может получить доступ к объекту. Если я добавлю какое-то действие пользователя в поток, например MessageBox, изображение будет отображаться. Я также попытался заморозить, это не решило проблему. – xaria