Обновление пользовательского интерфейса WPF с помощью BeginInvoke для высокоскоростной камеры

я используюгде я добавляю кадры изображения, поступающие с высокоскоростной камеры - (60-90 FPS)

Действие содержит методы для обновления изображения WritableBitmap в пользовательском интерфейсе.

Для обновления фреймов я использую отдельный поток, код которого ниже

      void FrameUIThread()
    {

        do
        {
            if (FrameActions.TryDequeue(out Action currentAction))
            {
                Application.Current.Dispatcher?.BeginInvoke(DispatcherPriority.Loaded, currentAction);
            }
            else
            {
                // DoEvents
                Application.Current.Dispatcher?.Invoke(DispatcherPriority.Loaded, new Action(() => { }));
            }
        } while (true);
    }

Была проблема, что иногда обновляется WritableBitmap и приходит новое изображение, а вот остальное приложение - (все кнопки, счетчики и прочее полностью заблокированы, ничего не могу нажать). Обнаружил, что использование DoEvents — помогает в этой ситуации. Но теперь поток образов не плавный, а прерывистый и в некоторые моменты времени идет рывками.

Есть ли способ решить эту проблему? Или может быть лучшее решение?

0 ответов

Другие вопросы по тегам