我有一个小应用程序,目的是当用户按下一个键时会发生一些事情
- 创建用于记录击键的对象的新实例
- 检查字典,获取 System.Media.Soundplayer 类的实例
- 修改屏幕上某个部分的背景颜色
- 在 SoundPlayer 中异步播放 .wav 文件
Dictionary 和 SoundPlayer 实例在加载表单时被实例化,并且所有 SoundPlayer 实例在添加到字典之前同步 Load() .wav 文件。
表单的 KeyDown 事件如下所示:
//do stuff up here, get the type, etc etc
//players is Dictionary<EnumFoo, SoundPlayer>
SoundPlayer sound = players[type];
sound.Play();
this.KeyUp += (sUp, eUp) =>
{
DateTime endTime = DateTime.Now;
foo.Duration = endTime - startTime;
sound.Stop();
this.resetColors();
};
这是我的问题:它似乎只播放较短的声音。有些最长约 30 秒,而另一些则少于 5 秒。如果我在 SoundPlayer 实例化后的任何位置放置断点,那么即使是长声音也能正确播放。
我正在考虑使用 ThreadPool 并将项目排队,但该选项有其自己的一组后果。
有任何想法吗?我以前从来没有在任何媒体课上乱过。