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

在单独的线程中运行WPF中的openGL引擎,wpf,multithreading,opengl,Wpf,Multithreading,Opengl,我有一个OpenGL渲染引擎,它是用非托管C++编码的,我想把它嵌入到WPF应用程序中。经过一点研究,我在windowsformshost中使用了一个windows窗体面板的手柄,如下面第二个解决方案所述: 到目前为止还不错。问题是,我需要实时渲染,当某些UI操作(如填充属性网格)花费太长时间时,渲染会闪烁 然后我想我需要在一个单独的线程中进行渲染。我尝试使用这种方法: 但它不起作用,因为我似乎无法将windowsformshost放在HostVisual中http://social.msdn.

我有一个OpenGL渲染引擎,它是用非托管C++编码的,我想把它嵌入到WPF应用程序中。经过一点研究,我在windowsformshost中使用了一个windows窗体面板的手柄,如下面第二个解决方案所述:

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

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

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


那么,你知道我该怎么做吗?

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


编辑:刚刚意识到WPF不支持DoEvents,但还有其他选择:

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


编辑:刚刚意识到WPF不支持DoEvents,但还有其他选择:

我已经实现了文章中的“如何避免闪烁”部分,它在正常操作、调整大小等时不会闪烁。。当我填充第三方属性网格时,它会闪烁,因为它在UI线程中自行组合,需要一些时间,而且我正在使用同一个调度程序渲染opengl。wpf DoEvents解决方案很有趣,但我不能将其插入任何地方,因为它是第三方代码。无论如何,感谢您的回复,我已经实现了文章中的“如何避免闪烁”部分,并且在正常操作、调整大小等情况下不会闪烁。。当我填充第三方属性网格时,它会闪烁,因为它在UI线程中自行组合,需要一些时间,而且我正在使用同一个调度程序渲染opengl。wpf DoEvents解决方案很有趣,但我不能将其插入任何地方,因为它是第三方代码。无论如何,谢谢你的回复