私は小さなアプリケーションを持っています。その意図は、ユーザーがキーを押すといくつかのことが起こるということです
- キーストロークを記録するオブジェクトの新しいインスタンスを作成します
- ディクショナリをチェックし、System.Media.Soundplayer クラスのインスタンスを取得します
- 画面上のセクションの背景色を変更します
- SoundPlayer で .wav ファイルを非同期に再生します。
Dictionary および SoundPlayer インスタンスは、フォームがロードされるときにインスタンス化され、すべての SoundPlayer インスタンスは、ディクショナリに追加される前に .wav ファイルを同期的に Load() します。
フォームの 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 を使用してアイテムをキューに入れることを検討していましたが、そのオプションには独自の一連の影響があります。
何か案は?これまで、メディア クラスをいじる必要はありませんでした。