我目前要在非UI线程上处理 WriteableBitmap 。
我基本上想要重用作为我的Image-control源的图像,并在Task.Run中处理它。
WriteableBitmap bitmap;
Task.Run(() =>
{
// Process the bitmap here
});
不幸的是,我收到以下异常,因为它在UI线程上被阻止
调用线程无法访问此对象,因为另一个线程拥有它。
注意 - 我不想在UI线程上处理代码!
有人能帮助我吗?
答案 0 :(得分:1)
必须在创建它们的线程上使用像WriteableBitmap这样的对象。所以你必须在另一个线程上分配它。
如果您希望在处理工作线程后在UI上使用已处理的图像,则应执行以下操作之一:
答案 1 :(得分:0)
WriteableBitmap
是 DispatcherObject ,只有创建 Dispatcher 的主题可以直接访问 DispatcherObject 。要从创建 DispatcherObject 的线程以外的线程访问 DispatcherObject ,我们需要在Dispatcher上调用Invoke或BeginInvoke DispatcherObject 与....关联。并且委托将在该线程上执行,因此渲染线程将阻塞。
如果您想使用原始像素数据,WriteableBitmap
将是一个不错的选择。我们可以使用WriteableBitmap的 CopyPixels 方法加载像素数据到int数组,我们修改int array
中的数据后我们可以使用< strong> WritePixels 方法更新WriteableBitmap
的像素。所以,也许你可以尝试在后台线程中操作int数组。
答案 2 :(得分:0)
创建要写入Task中WriteableBitmap的像素数据(数组),并在GUI线程上执行Write。