当WritableBitmap.BackBuffer在非UI线程中更新时应用程序停止响应?

时间:2015-05-28 14:02:25

标签: c# wpf multithreading

我需要异步更新图像的像素。我对本主题中提出的解决方案存在问题 - 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();
});

我做错了什么?

2 个答案:

答案 0 :(得分:2)

停止货物结算。 unsafe块完全没用,删除它。

也就是说,_bitmap.Lock()_bitmap.Unlock() 便宜。你有没有介绍申请?我非常确定大部分时间花在Invoke次调用上,在UI线程上运行。

答案 1 :(得分:0)

尝试使用Dispatcher.BeginInvoke代替Dispatcher.Invoke以异步方式运行它。