我正在尝试重建一个旧的节拍器应用程序,该应用程序最初使用C++中的MFC编写,使用C#在.NET中编写.我遇到的一个问题是让计时器足够准确地"打勾".
例如,假设一个简单的BPM(每分钟节拍数)为120,则计时器应每隔0.5秒(或500毫秒)打勾.然而,使用它作为刻度的基础并不完全准确,因为.NET只能保证计时器在经过的时间过去之前不会打勾.
目前,为了解决上面使用的相同的120 BPM示例,我将刻度设置为100毫秒,并且仅在每5个计时器刻度上播放点击声.这确实提高了准确度,但如果感觉有点像黑客.
那么,获得准确滴答的最佳方法是什么?我知道有更多的计时器可用于Visual Studio中随时可用的Windows窗体计时器,但我并不熟悉它们.
在.NET中有三个称为"Timer"的计时器类.听起来你正在使用Windows Forms,但实际上你可能会发现System.Threading.Timer类更有用 - 但要小心,因为它回调了池线程,所以你不能直接与你的表单交互回调.
另一种方法可能是调用Win32多媒体计时器 - timeGetTime,timeSetPeriod等.
一个快速谷歌找到了这个,这可能是有用的http://www.codeproject.com/KB/miscctrl/lescsmultimediatimer.aspx
"多媒体"(计时器)是在此上下文中搜索的热门词.