我有一些動畫在OpenGL上下文窗口中運行,所以我需要不斷重繪它。所以我想出了以下代碼:在60 FPS的.NET重繪?
void InitializeRedrawTimer()
{
var timer = new Timer();
timer.Interval = 1000/60;
timer.Tick += new EventHandler(timer_Tick);
timer.Start();
}
void timer_Tick(object sender, EventArgs e)
{
glWin.Draw();
}
雖然這隻給了我40 FPS。但是,如果我將間隔設置爲1毫秒,則可以達到60個。那麼其他20毫秒的時間到了哪裏?這僅僅是由於計時器的準確性差或什麼?如果我想讓我的程序儘可能快地運行,有什麼辦法可以不斷調用draw func?
不錯!使用Application.Idle似乎比1 ms定時器更優雅。我將不得不在明天嘗試這個'StopWatch'。謝謝! **編輯:**其實,我撒謊。當您調整窗口大小或移動窗口時,它似乎停止空轉,從而停止重新繪製。這基本上降低了繪圖的優先級。也許我會堅持一個計時器來強制執行最低重繪速度......沒有理由我無法將兩種方法結合起來。 – mpen 2010-01-14 09:43:46
另外,StopWatch僅適用於計時事物,不適用於回調事件。 – mpen 2010-01-14 09:52:04
您可以嘗試在空閒偶數結束時啓動計時器,然後在空閒事件觸發時再次停止/檢查計時器。你可以用這種方式很接近。 – Nanook 2010-01-14 10:11:54