0

我对这段代码有一些问题:

private Bitmap WriteableBitmapToBitmap(WriteableBitmap wb)
{
     BitmapEncoder encoder = new BmpBitmapEncoder();
     encoder.Frames.Add(BitmapFrame.Create(wb));
     using (MemoryStream ms = new MemoryStream())
     {
         encoder.Save(ms);
         Bitmap b = new Bitmap(ms);
         return b;
      }
}

如果我启动此代码,WPF UI 将冻结。我只想将 WriteableBitmap 转换为 Bitmap,以便可以将其用于 Emgu 图片处理。WriteableBitmap 是从 Kinect 的深度数据创建的。我是编程新手,所以肯定有更好的方法,但我希望这也能奏效。

任何人都可以帮助我使用该代码吗?

4

1 回答 1

0

有点晚了,但我想补充一些更多信息。

问题是您正在使用使用 UI 线程的同步调用,与所有其他同步调用不同,此调用需要一些时间,因此,您的应用程序将被冻结,直到调用完成。

您需要使用异步调用,这样您的 UI 线程将是空闲的,因此 UI 不会被冻结。

异步调用的方式有很多,比如开启一个新的任务,线程,或者我比较喜欢的方式,就是使用async await,非常棒——可以写一段同步代码,在里面加入async和await正确的地方,哇——这是一个异步代码!

要阅读有关异步等待的更多信息,请单击此处

于 2013-10-26T12:04:45.793 回答