InteropBitmap синхронизации - PullRequest
5 голосов
/ 31 мая 2011

WPF InteropBitmap может быть создан из разделяемой памяти, т.е.

Imaging.CreateBitmapSourceFromMemorySection()

В этом случае мы можем обновить разделяемую память в другом потоке или процессе, а затем после обновления вызвать InteropBitmap.Invalidate () , чтобы представить изменения.

Из исходного кода WPF InteropBitmap - это просто оболочка IWICBitmap, но она не предоставляет IWICBitmap :: lock , которая используется для эксклюзивной записи.

Итак, как мне синхронизировать запись и чтение WPF InteropBitmap?

  1. Обновление происходит в пользовательской ветке.
  2. Чтение всегда происходит во внутреннем потоке рендеринга WPF через IWICBitmapSource :: CopyPixels

Спасибо

1 Ответ

0 голосов
/ 31 мая 2011

Вы можете создать 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;
    }
}
...