我有一个运行Thread
的类,其中包含一些数据处理:
void thread_function()
{
while (client != null)
{
....some stuff...
wrBitmap.WritePixels(rect, rgbch, rowLen, 0); // wrBitmap is WriteableBitmap
OnFrameRdy(this, MyEventsArgs);
}
}
如何在没有内存复制的情况下从wrBitmap
进程读取Thread
?我需要将wrBitmap
绑定到我的Image
wpf控件。那可能吗?
或者唯一的方法是将wrBitmap
复制到课堂上的其他变量中并在我的控件中读取它?
我不想复制变量,因为它会给我带来巨大的内存开销。
我以为我可以使用事件并创建我的OnFrameRdy
事件,但仍然不允许我使用数据。
如果我可以输入Image.source = MyClass.wrBitmap
答案 0 :(得分:0)
我猜测你从InvalidOperationException
尝试从不同的线程设置Source
属性或在不同的线程中使用Bitmap
而不是创建(你< strong>认真应该更清楚你要解决的问题是什么。
如果我是对的,你应该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));
}
}