Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# InteropBitmap同步_C#_Wpf_Drawing - Fatal编程技术网

C# InteropBitmap同步

C# InteropBitmap同步,c#,wpf,drawing,C#,Wpf,Drawing,WPF InteropBitmap可以从共享内存创建,即 Imaging.CreateBitmapSourceFromMemorySection() 在这种情况下,我们可以在另一个线程或进程中更新共享内存,然后在更新后调用InteropBitmap.Invalidate(),以显示更改 从WPF源代码来看,InteropBitmap只是IWICBitmap的包装,但它不公开用于独占写入的内容 那么,如何同步WPF InteropBitmap的写入和读取 更新发生在用户的线程中 读取总是在WPF

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

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

从WPF源代码来看,InteropBitmap只是IWICBitmap的包装,但它不公开用于独占写入的内容

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

  • 更新发生在用户的线程中
  • 读取总是在WPF内部渲染线程中通过

  • 谢谢

    您可以创建一个包装器类,它公开一个锁对象和操作图像的方法。是一些工作,但会100%工作

    比如:

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