У меня есть небольшое приложение, цель в том, что, когда пользователь нажимает клавишу несколько вещей, которые случаютсяSystem.Media.SoundPlayer Selective Игра
- Создает новый экземпляр объекта для записи нажатий клавиш
- Проверяет словарь, хватает экземпляр System.Media.Soundplayer класса
- Изменяет BackColor секции на экране
- Пьеса, асинхронный, файл .wav в SoundPlayer
экземпляры Dictionary и SoundPlayer создаются при загрузке формы, и все экземпляры SoundPlayer синхронно загружают файлы .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 и очередности элементов, но этот параметр имеет свой собственный набор ветвей.
Любые идеи? Мне никогда не приходилось вмешиваться в какие-либо из медиа-классов.