[英]Process image on non-ui thread
我目前有一个WriteableBitmap ,我想在非 UI 线程上处理它。
我基本上想重用作为我的图像控件源的图像并在 Task.Run 中处理它。
WriteableBitmap bitmap;
Task.Run(() =>
{
// Process the bitmap here
});
不幸的是,我收到以下异常,因为它在 UI 线程上被阻止
调用线程无法访问此对象,因为其他线程拥有它。
注意 - 我不想在 UI 线程上处理代码!
有人能帮助我吗?
像WriteableBitmap这样的对象必须在它们创建的线程上使用。 所以你必须在另一个线程上分配它。
如果您希望在处理工作线程后在UI上使用已处理的图像,则应执行以下操作之一:
WriteableBitmap
是DispatcherObject ,只有创建Dispatcher的线程才可以直接访问DispatcherObject 。 要从创建DispatcherObject的线程以外的线程访问DispatcherObject ,我们需要在与DispatcherObject关联的Dispatcher上调用Invoke或BeginInvoke。 委托将在该线程上执行,因此渲染线程将阻塞。
如果您想使用原始像素数据, WriteableBitmap
将是一个不错的选择。 我们可以使用WriteableBitmap的CopyPixels方法将像素数据加载到int数组中,在我们修改int array
的数据后,我们可以使用WritePixels方法更新WriteableBitmap
的像素。 所以,也许你可以尝试在后台线程中操作int数组。
创建要写入Task中WriteableBitmap的像素数据(数组),并在GUI线程上执行Write。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.