好的,我有一个 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 作为线程运行。图像被接收,这没有问题。我通过将 img_pixel 数组保存到 bmp 文件进行测试,并生成了文件。只是图像不显示。因此,我在分配源后放置了一个消息框,然后我就可以在 Image 对象上看到图像。所以我认为我增加了睡眠时间的问题,但即使图像没有刷新。可能是什么问题?
编辑:将更新图像的代码移动到另一个函数后,它工作正常。我使用 BeginInvoke() 而不是调用一切正常。