我需要异步更新图像的像素。我对本主题中提出的解决方案存在问题 - topic。所以,以下代码从非UI线程调用。应用程序在执行此代码期间停止响应:
Dispatcher.Invoke(() =>
{
_bitmap.Lock();
pBackBuffer =_bitmap.BackBuffer;
});
unsafe
{
Marshal.Copy(_displayPixels, 0, pBackBuffer, _displayPixels.Length);
}
Dispatcher.Invoke(() =>
{
_bitmap.AddDirtyRect(new Int32Rect(0, 0, DepthWidth, DepthHeight));
_bitmap.Unlock();
});
我做错了什么?
答案 0 :(得分:2)
停止货物结算。 unsafe
块完全没用,删除它。
也就是说,_bitmap.Lock()
和_bitmap.Unlock()
远便宜。你有没有介绍申请?我非常确定大部分时间花在Invoke
次调用上,做在UI线程上运行。
答案 1 :(得分:0)
尝试使用Dispatcher.BeginInvoke
代替Dispatcher.Invoke
以异步方式运行它。