在单独的线程中在WPF中运行openGL引擎

时间:2011-08-08 11:29:01

标签: wpf multithreading opengl

我有一个用非托管C ++编码的openGL渲染引擎,我想将它嵌入到WPF应用程序中。经过一番研究后,我设法通过在windowsformshost中使用windows窗体面板的句柄来实现,如此处所述(第二个解决方案):

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

到目前为止还不错。问题是,我需要渲染是实时的,当一些UI操作花费太长时间(比如填充属性网格)时,渲染会闪烁。

然后我想我需要在一个单独的线程中进行渲染。我尝试使用这种方法:

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

但它不起作用,因为我似乎无法在HostVisual中放置一个windowsformshost(http://social.msdn.microsoft.com/Forums/en-AU/wpf/thread/124cc95c-a9c6-4aca-a5fc- 4f959ea715c3)

所以,任何想法我该怎么做?

1 个答案:

答案 0 :(得分:0)

如果你使用双缓冲,它应该永远不会闪烁。请参阅“如何避免闪烁?”部分。在您链接的第一篇文章中。您还可以尝试在需要很长时间执行的代码中插入Application.DoEvents()调用。只是一些建议可以替代使用线程解决方案增加的复杂性。

编辑:刚刚意识到WPF不支持DoEvents(),但还有其他选择:http://nmarian.blogspot.com/2007/09/doevents-in-wpf.html