我有一些在OpenGL上下文窗口中运行的动画,所以我需要不断地重绘它。因此,我想出了以下代码:
private void InitializeRedrawTimer()
{
var timer = new Timer();
timer.Interval = 1000 / 60;
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
}
private void timer_Tick(object sender, EventArgs e)
{
glWin.Draw();
}
然而,这只能让我获得40 FPS。如果我将间隔设置为1毫秒,我可以达到60 FPS。那么其他的20毫秒去了哪里?这只是计时器精度不足吗?如果我想让我的程序尽可能快地运行,有没有一种方法可以持续调用绘制函数?
Application.Idle
似乎比1毫秒计时器更优雅。我明天也要试试这个StopWatch
。谢谢! 编辑:实际上,我撒了谎。当你调整大小或移动窗口时,它似乎停止了空闲状态,因此停止了重绘。这基本上降低了绘图的优先级。也许我会坚持使用计时器来强制执行最小重绘率...没有理由不能结合两种方法。 - mpen