我有一个正在开发的 C# 游戏程序。它使用声音样本和 winsock。
当我测试运行游戏时,大部分音频都可以正常工作,但有时如果它是按顺序播放多个样本,则应用程序表格会稍微晃动一下,然后又回到原来的位置。
我如何调试这个或以可管理的方式向你们展示它?我相信没有人会因为害怕病毒攻击而想要整个应用程序代码。
请指导我..
编辑:我无法确定产生此结果的任何代码部分。它就是这样,我无法解释。
编辑:没有 x/y 位置没有改变。窗口像晃动几个像素,然后回到晃动之前的位置。
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();
}
Run Code Online (Sandbox Code Playgroud)
你能在上面的代码中看到任何会产生这种震动的东西吗?
编辑:是的,代码正在执行: this.Invoke(new Action(delegate(){ ....})); 这会是吗?我该如何解决这个问题?
编辑:
stream = Properties.Resources.ResourceManager.GetStream("_destroyed");
player = new System.Media.SoundPlayer(stream);
player.PlaySync();
player.Dispose();
stream.Dispose();
Run Code Online (Sandbox Code Playgroud)
如果取出上面的代码,那么它工作正常!有任何想法吗?
编辑:我用以下内容替换了该行:
stream = Properties.Resources.ResourceManager.GetStream("_destroyed");
Run Code Online (Sandbox Code Playgroud)
到不同的文件名,但问题仍然存在,但至少不是音频文件已损坏。
编辑:MSN 当有人发送微调时?有点像,但只发生 2 或 3 次。
编辑:您是否使用任何 3rd 方库?- 不,我没有使用任何 3rd 方库。
编辑:似乎无论是什么文件,第三个样本总是会导致这种情况。
编辑:在我使用声音样本的任何地方都会发生。如果我播放 3 个样本,就会发生这种情况。
编辑:@nobugz:是的,认为你是对的。问题是让 UI 线程阻塞太久。因为我试过只使用合并的音频文件,问题在于它的原始持续时间。
编辑:我通过Application.DoEvents();在每个示例播放命令之后放置来解决这个问题。没有震动:)
编辑:上述解决方案并没有真正奏效。随着播放器样本数量的增加,应用程序 GUI 再次卡住。已采用使用 QueueUserWorkItem 的解决方案。这仍然有待证明是一个令人满意的解决方案,因为交叉治疗发生,即可以在旧的样本仍在播放的同时启动新的样本线程。
随着更多知识的曝光,将对此进行更新。