我有一个带有openGL视图的窗口。 我的窗口是WPF;它包含一个包含opengl上下文的UserControl。
如果我连续调用我的渲染函数(OnPaint()在末尾调用Refresh()),则帧速率为75 fps:这是我的目标。 问题是其他事件(鼠标事件等)没有足够的时间。 该应用程序不会冻结,但它无法使用。
我在UserControl中添加了一个System :: Timers :: Timer。它以30 fps调用Refresh()。 我尝试在WPF中使用CompositionTarget.Rendering事件:它以30 fps调用UserControl.Invalidate()。
使用这些计时器,应用程序可以正常运行所有事件。 但是他们没有足够快地调用我的渲染功能。
有没有办法更频繁地调用我的渲染函数?
答案 0 :(得分:1)
我认为System.Timers.Timer
在这种情况下可能不合适。切换到System.Threading.DispatcherTimer
并给它一个高优先级。 MSDN details here
DispatcherTimer
还将确保呼叫来自同一个线程。
从上面的MSDN链接:
如果在WPF应用程序中使用System.Timers.Timer,则值得 注意到System.Timers.Timer在不同的线程上运行 用户界面(UI)线程。
使用DispatcherTimer的原因与 System.Timers.Timer是DispatcherTimer在同一个上运行的 线程作为Dispatcher和DispatcherPriority可以在上面设置 DispatcherTimer。