Dot-Net

從 C# 中的計時器獲取準確的刻度

  • December 18, 2014

我正在嘗試重建一個舊的節拍器應用程序,該應用程序最初是使用 C++ 中的 MFC 編寫的,然後使用 C# 在 .NET 中編寫。我遇到的問題之一是讓計時器足夠準確地“滴答”。

例如,假設簡單的 BPM(每分鐘節拍數)為 120,則計時器應每 0.5 秒(或 500 毫秒)計時一次。但是,將其用作滴答聲的基礎並不完全準確,因為 .NET 僅保證您的計時器在經過的時間過去之前不會滴答作響。

目前,為了解決上面使用的相同 120 BPM 範例的問題,我將滴答聲設置為 100 毫秒,並且僅在每 5 個計時器滴答聲時播放點擊聲音。這確實大大提高了準確性,但感覺有點像黑客。

那麼,獲得準確刻度的最佳方法是什麼?我知道有比 Visual Studio 中現成的 windows 窗體計時器更多的計時器可用,但我對它們並不熟悉。

.NET 中有三個計時器類,稱為“計時器”。聽起來您使用的是 Windows 窗體,但實際上您可能會發現 System.Threading.Timer 類更有用 - 但要小心,因為它會回調池執行緒,因此您無法直接與您的窗體互動回調。

另一種方法可能是呼叫/呼叫 Win32 多媒體計時器 - timeGetTime、timeSetPeriod 等。

一個快速的Google發現了這個,這可能很有用<http://www.codeproject.com/KB/miscctrl/lescsmultimediatimer.aspx>

“多媒體”(計時器)是在此上下文中搜尋的流行詞。

引用自:https://stackoverflow.com/questions/8742