запуск движка openGL в WPF в отдельном потоке - PullRequest
2 голосов
/ 08 августа 2011

У меня есть механизм рендеринга openGL, написанный на неуправляемом C ++, и я хочу встроить его в приложение WPF. После небольшого исследования мне удалось сделать это с помощью дескриптора панели форм Windows на хосте windowsforms, как описано здесь ( 2nd solution ):

http://www.codeproject.com/Articles/127141/Unmanaged-C-OpenGL-Drawing-and-C-WinForms-WPF-inte/?display=Mobile

Пока все хорошо. Проблема в том, что мне нужно, чтобы рендеринг выполнялся в режиме реального времени, и когда какая-то операция пользовательского интерфейса занимает слишком много времени (например, заполнение сетки свойств), рендер мерцает.

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

http://blogs.msdn.com/b/dwayneneed/archive/2007/04/26/multithreaded-ui-hostvisual.aspx

Но это не работает, потому что кажется, что я не могу разместить хост Windows Forms внутри HostVisual (http://social.msdn.microsoft.com/Forums/en-AU/wpf/thread/124cc95c-a9c6-4aca-a5fc-4f959ea715c3)

Итак, есть идеи, как я могу это сделать?

1 Ответ

0 голосов
/ 08 августа 2011

Если вы используете двойную буферизацию, она никогда не должна мерцать. Смотрите раздел «Как избежать мерцания?» в первой статье, на которую вы ссылались. Вы также можете попробовать вставить вызовы Application.DoEvents () в код, выполнение которого занимает много времени. Просто несколько предложений в качестве альтернативы дополнительной сложности использования многопоточного решения.

РЕДАКТИРОВАТЬ: только что понял, WPF не поддерживает DoEvents (), но есть альтернативы: http://nmarian.blogspot.com/2007/09/doevents-in-wpf.html

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