Хорошо, чтобы использовать HWND C # Panel в Win32 Dll в другом потоке? - PullRequest
0 голосов
/ 20 ноября 2011

У меня что-то работает, но я не уверен, что это нормально, и если это вызовет проблемы позже.

У меня есть приложение Win32 C ++, которое выполняет некоторую обработку видео и использует Direct3D для отображения (не мойкод).Моя задача - заменить GUI на C # GUI.

Я превратил код C ++ в dll.Я создал графический интерфейс в C # и у меня есть панель, предназначенная для отображения видео.Я передаю HWND этой панели в dll, и все, кажется, работает нормально.

Но - к этой панели обращается поток, отличный от того, в котором он был создан, что не должно быть сделано.
Часть меня хочет "оставить достаточно хорошо в покое", но это неправильно, и я подозреваю, что это вызовет проблемы в будущем.Например, когда мы хотим отловить события кликов на панели, которая будет в главном потоке или потоке пользовательского интерфейса ... который создал панель.

Любые предложения о том, как мне следует это делать?Спасибо Спасибо

Ответы [ 2 ]

2 голосов
/ 20 ноября 2011

Я думаю, вы уже знаете ответ на этот вопрос.Окна имеют сходство потоков.Все операции с окном должны выполняться из потока, который его создал.

Учитывая это правило, я не могу представить, что DLL отвечает за перенос доступа к окну в другой поток, и предполагаю, что это ваш код, которыйЯвляется ли.Решение для вас - создать и открыть окно в том же потоке, который вызывает DLL.

0 голосов
/ 20 ноября 2011

Основная проблема, с которой я столкнулся в этой технике, заключается в том, что ваш пользовательский интерфейс может мерцать. Если вы достаточно рано начали использовать WPF, вы можете взглянуть на D3DImage , если не то, что вы делаете сейчас, будет в основном работать.

...