.net - 从 C# 中的计时器获取准确的滴答声

标签 .net timer

我正在尝试重建一个旧的节拍器应用程序,该应用程序最初是使用 C++ 中的 MFC 编写的,现在使用 C# 在 .NET 中编写。我遇到的问题之一是让计时器足够准确地“滴答”。

例如,假设简单的 BPM(每分钟节拍数)为 120,则计时器应每 0.5 秒(或 500 毫秒)滴答一次。然而,使用它作为滴答的基础并不完全准确,因为 .NET 只能保证您的计时器在耗时过去之前不会滴答。

目前,为了解决上面使用的相同 120 BPM 示例的问题,我将滴答声设置为 100 毫秒左右,并且仅在每 5 个计时器滴答声时播放点击声音。这确实大大提高了准确性,但感觉有点像黑客。

那么,获得准确报价的最佳方法是什么?我知道有比 Visual Studio 中可用的 Windows 窗体计时器更多的可用计时器,但我不太熟悉它们。

最佳答案

.NET 中有三个称为“Timer”的计时器类。听起来您正在使用 Windows 窗体,但实际上您可能会发现 System.Threading.Timer 类更有用 - 但要小心,因为它会回调池线程,因此您无法直接与窗体交互回调。

另一种方法可能是 p/调用 Win32 多媒体计时器 - timeGetTime、timeSetPeriod 等。

快速谷歌发现了这个,这可能有用http://www.codeproject.com/KB/miscctrl/lescsmultimediatimer.aspx

“多媒体”(计时器)是在此上下文中搜索的流行词。

关于.net - 从 C# 中的计时器获取准确的滴答声,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8742/

相关文章:

java - 如何在java中做一个定时器数组

javascript - 如何限制在 jQuery slider 上按下按键的频率?

.net - 是否可以对复杂的声明进行建模(分层/嵌套/等)?

.net - 查找当前配置文件的名称

Java:使用线程的应用程序中的无限循环

java - java 中带有计时器的 M3 播放器 [快进]

c# - 从 String 转换为 Enum 返回在 WPF 中无效的转换

c# - 非窗口程序如何监控系统剪贴板?

c# - 在 DropCreateDatabaseIfModelChanges 删除数据库之前进行备份

带定时器的 Python 线程