InteropBitmap synchronization

本文关键字:synchronization InteropBitmap | 更新日期: 2023-09-27 17:57:57

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

Imaging.CreateBitmapSourceFromMemorySection()

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

从WPF源代码来看,InteropBitmap只是IWICBitmap的包装器,但它没有公开用于独占写入的IWICBitmap::lock。

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

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

感谢

InteropBitmap synchronization

您可以创建一个WrapperClass,它公开了一个锁对象和操作Image的方法。是一些工作,但会工作100%

类似于:

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