У меня есть программа на C #, которую я разрабатываю. он использует образцы звука и winsock.
при тестовом запуске игры большая часть звука работает нормально, но время от времени, если последовательно воспроизводятся несколько семплов, форма приложения слегка встряхивается и затем возвращается на прежнюю позицию.
как мне отладить это или представить его вам в управляемой манере? Я уверен, что никто не захочет получить весь код приложения, опасаясь вирусных атак.
пожалуйста, ведите меня ..
РЕДАКТИРОВАТЬ: я не смог определить ни один раздел кода, который приводит к этому результату. это просто так, и я не могу это объяснить.
РЕДАКТИРОВАТЬ: нет, положение х / у не меняется. окно как будто встряхивает вокруг нескольких пикселей и затем возвращается в положение, в котором оно было до сотрясения.
if (audio)
{
Stream stream;
SoundPlayer player;
stream = Properties.Resources.ResourceManager.GetStream("_home");
player = new System.Media.SoundPlayer(stream);
player.PlaySync();
player.Dispose();
string ShipID = fireResult.DestroyedShipType.ToString();
stream = Properties.Resources.ResourceManager.GetStream("_" + ShipID);
player = new System.Media.SoundPlayer(stream);
player.PlaySync();
player.Dispose();
stream = Properties.Resources.ResourceManager.GetStream("_destroyed");
player = new System.Media.SoundPlayer(stream);
player.PlaySync();
player.Dispose();
}
Вы видите что-нибудь в вышеприведенном коде, которое может привести к дрожанию?
РЕДАКТИРОВАТЬ: да, код выполняется внутри: this.Invoke (новое действие (делегат () {....})); это могло быть это? как мне решить это?
EDIT:
stream = Properties.Resources.ResourceManager.GetStream("_destroyed");
player = new System.Media.SoundPlayer(stream);
player.PlaySync();
player.Dispose();
stream.Dispose();
если вынуть вышеприведенный код, то он отлично работает! есть идеи?
РЕДАКТИРОВАТЬ: я заменил строку с:
stream = Properties.Resources.ResourceManager.GetStream("_destroyed");
для другого имени файла, но проблема все еще существует, но, по крайней мере, это не аудиофайл поврежден.
РЕДАКТИРОВАТЬ: MSN, когда кто-то отправляет подтолкнуть? это немного похоже, но происходит только 2 или 3 раза.
EDIT: Вы используете сторонние библиотеки? - нет, я не использую какие-либо сторонние библиотеки.
РЕДАКТИРОВАТЬ: кажется, независимо от того, какой файл, 3-й пример всегда вызывает это.
РЕДАКТИРОВАТЬ: происходит везде, где я использую звуковые образцы. если я сыграю 3 сэмпла, ситуация произойдет.
РЕДАКТИРОВАТЬ: @nobugz: да, думаю, что вы правы. проблема в том, чтобы задержать поток пользовательского интерфейса слишком долго. как я пытался просто использовать объединенный аудио-файл, и проблема там, учитывая его первоначальную продолжительность.
РЕДАКТИРОВАТЬ: я решил эту проблему, поставив Application.DoEvents();
после каждой команды воспроизведения сэмпла. не трясет:)
РЕДАКТИРОВАТЬ: вышеупомянутое решение действительно не работает. по мере роста количества сэмплов игроков приложение снова зависло. вместо этого было использовано решение с использованием QueueUserWorkItem. это еще предстоит доказать как удовлетворительное решение, так как происходит перекрестная торговля, т. е. новая нота семплов может быть запущена, пока старая еще играет.
будет обновлять это по мере появления новых знаний.