Вопрос по c#, wpf – WPF: Как предотвратить разрыв с WriteableBitmap?

9

Я используюWriteableBitmap для отображения изображений я обрабатываю себя со скоростью около 20 кадров в секунду.

Этот вопрос (WPF: более эффективный способ отображения быстро меняющихся изображений?)
и этот вопрос (Как отображать быстро обновляемые изображения без большого выделения памяти?)
указать, что лучший способ сделать это с помощьюWriteableBitmap.

Документация дляWriteableBitmap указывает на то, что вызовWritePixels() в потоке пользовательского интерфейса заставит поток рендеринга перерисовать изображение:

MSDN documentation:
The UI thread writes content to the back buffer. The render thread reads content from the front buffer and copies it to video memory. Changes to the back buffer are tracked with changed rectangular regions.

< snip / >

When updates are sent to the rendering thread, the rendering thread copies the changed rectangles from the back buffer to the front buffer. The rendering system controls this exchange to avoid deadlocks and redraw artifacts, such as "tearing".

Я обрабатываю свои изображения в фоновом потоке, а затем используюDispatcher.BeginInvoke() звонитьWritePixels(), чтобы убедиться, чтоWritePixels() вызывается в потоке пользовательского интерфейса.

Я обнаружил, что разрыв по-прежнему происходит сWriteableBitmapи в приложении, над которым я работаю, выглядит ужасно (это приложение для медицинской визуализации). Что я могу сделать?

После стольких лет .... вы исправили эту проблему? qakmak
Этот ответ недостаточно хорош для меня. но все равно спасибо qakmak
К сожалению, не уверен, что вы получите лучший ответ, чем этот. Все признаки указывают на то, что это проблема уровня ОС. Rob
@qakmak, это трудно вспомнить, но я считаю, что переход на более современную ОС был ответом. Смотрите принятый ответ. Rob

Ваш Ответ

3   ответа
1

возможно, вы перезаписываете свое растровое изображение. Использование Dispatcher.Invoke () вместо BeginInvoke () может помочь.

Error: User Rate Limit Exceeded Rob
Error: User Rate Limit Exceeded Rob
Error: User Rate Limit Exceededshouldn'tError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
5

вложенной в WriteableBitmap, чтобы избежать разрывов, но в некоторых конфигурациях системы это неизбежно. Это в основном происходит в Windows XP или Vista с отключенным Aero (DWM).

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Rob
0

что это старый поток, но у нас была точно такая же проблема, и в нашем случае она была вызвана вызовом нашего метода отображения обновлений с использованием Dispatcher.BeginInvoke - в тот момент, когда мы изменили на Dispatcher.Invoke, он сразу же очистился.

Похожие вопросы