InteropBitmap同步

Cha*_*ang 5 c# wpf drawing

WPF InteropBitmap可以从共享内存创建,即

Imaging.CreateBitmapSourceFromMemorySection()
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我们可以更新另一个线程或进程中的共享内存,然后在更新之后调用InteropBitmap.Invalidate()来显示更改.

从WPF源代码中,InteropBitmap只是IWICBitmap的包装器,但它不公开用于独占写入的IWICBitmap :: lock.

那么,我如何同步WPF InteropBitmap的写入和读取?

  1. 更新发生在用户的线程中.
  2. 读取总是发生在WPF内部渲染线程中,通过IWICBitmapSource :: CopyPixels

谢谢

fix*_*gon -2

您可以创建一个 WrapperClass,它公开一个锁对象和操作图像的方法。需要一些工作,但 100% 有效

就像是:

class InteropBitmapSyncWrapper
{

    public InteropBitmapSyncWrapper(InteropBitmap wrappedBitmap)
    {
        WrappedBitmap = wrappedBitmap;
        this.Lock = new Object();
    }

    public InteropBitmap WrappedBitmap
    {
        get;
        set;
    }

    public Object Lock
    {
        get;
        private set;
    }
}
Run Code Online (Sandbox Code Playgroud)