Как отобразить в главном окне из вторичного потока для видеоплеера - PullRequest
0 голосов
/ 20 мая 2011

Я создаю приложение видеоплеера с пользовательским интерфейсом в C # и декодированием и отображением видео (DirectX) в C ++.

Код C ++ компилируется как DLL и взаимодействует с пользовательским интерфейсом C #.

Чтобы поддерживать правильную частоту кадров дисплея, мне нужно создать вторичный поток в C ++ DLL или C #, который может выполнять точную синхронизацию и вызывать функцию отображения через определенные промежутки времени.

Однако создание вторичного потока, который отправляет отображение в окно, созданное первичным потоком (из C # GUI), создает нарушение прав доступа и приводит к сбою.

Однако, если я использую объект таймера в C # для отображения, проигрыватель работает, но я не могу поддерживать правильную частоту кадров из-за его грубой гранулярности.

Что было бы хорошим решением для этого?

1 Ответ

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

Я думаю, что сбои, которые вы испытываете, вызваны тем, что вы не можете получить доступ к элементам управления Windows Forms извне основного потока.

Рассмотрите возможность использования Control.Invoke () для вызова нужного вам выполнения в главном потоке.

Имейте в виду, что Control.Invoke() использует очередь сообщений Windows для прохождения запроса, поэтому следует ожидать некоторых неточностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...