Обновление пользовательского интерфейса WPF с помощью BeginInvoke для высокоскоростной камеры
я использую
Действие содержит методы для обновления изображения 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 — помогает в этой ситуации. Но теперь поток образов не плавный, а прерывистый и в некоторые моменты времени идет рывками.
Есть ли способ решить эту проблему? Или может быть лучшее решение?