从其他线程读取图像的正确方法

本文关键字:方法 图像 其他 线程 读取 | 更新日期: 2023-09-27 18:03:51

我有一个类,它运行Thread,内部有一些数据处理:

void thread_function()
{
  while (client != null)
  {
  ....some stuff...
  wrBitmap.WritePixels(rect, rgbch, rowLen, 0); // wrBitmap is WriteableBitmap
  OnFrameRdy(this, MyEventsArgs);
  }
}

如何在不复制内存的情况下从Thread进程读取wrBitmap?我需要将wrBitmap绑定到我的Imagewpf控件。这可能吗?

或者唯一的方法是为类中的其他变量复制wrBitmap,并在我的控件中读取它?我不想复制变量,因为它会给我很大的内存开销。

我认为我可以使用事件并创建了我的OnFrameRdy事件,但它仍然不允许我使用数据。如果我能键入Image.source = MyClass.wrBitmap

从其他线程读取图像的正确方法

,那将非常酷

我猜您正试图从不同的线程设置Source属性,或者在创建的不同线程中使用Bitmap,从而获得InvalidOperationException(您应该更加明确地了解您试图解决的问题(。

如果我是对的,您应该Freeze您的位图(这不允许对其进行更改(,并在UI线程上调用对Image.Source的赋值。这应该对你有用:

void thread_function()
{
    while (client != null)
    {
        ....some stuff...
        wrBitmap.WritePixels(rect, rgbch, rowLen, 0); // wrBitmap is WriteableBitmap
        wrBitmap.Freeze();
        Dispatcher.BeginInvoke((Action)(() => Image.Source = wrBitmap));
    }
}