从其他线程读取图像的正确方法
本文关键字:方法 图像 其他 线程 读取 | 更新日期: 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
绑定到我的Image
wpf控件。这可能吗?
或者唯一的方法是为类中的其他变量复制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));
}
}