0

私は小さなアプリケーションを持っています。その意図は、ユーザーがキーを押すといくつかのことが起こるということです

  1. キーストロークを記録するオブジェクトの新しいインスタンスを作成します
  2. ディクショナリをチェックし、System.Media.Soundplayer クラスのインスタンスを取得します
  3. 画面上のセクションの背景色を変更します
  4. 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 を使用してアイテムをキューに入れることを検討していましたが、そのオプションには独自の一連の影響があります。

何か案は?これまで、メディア クラスをいじる必要はありませんでした。

4

1 に答える 1