C#   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c# – 音频播放时WinForms应用程序表单“摇动”大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_489_2@
我有一个正在开发的C#游戏程序.它使用声音样本和winsock.

当我测试运行游戏时,大多数音频工作正常,但如果是多个样本正在顺序播放,应用程序形式会稍微摇动,然后回到原来的位置.

我如何调试这个或以可管理的方式呈现给你们?我确信没有人会因为害怕病毒攻击而想要整个应用程序代码.

请指导我..

编辑:我无法确定产生此结果的任何代码部分.它就是这样,我无法解释它.

编辑:没有x / y位置没有变化.窗口像是在几个像素周围摇晃然后回到摇晃之前的位置.

if (au@R_502_2442@)
{
    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();
}

你能看到上面代码中会产生这种震动的东西吗?

编辑:是的,代码正在a:this.Invoke中执行(new Action(delegate(){….}));这可能吗?我该如何解决这个问题?

编辑:

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次.

编辑:您使用的是第三方图书馆吗? – 不,我没有使用任何第三方库.

编辑:似乎无论什么文件,第三个样本总是导致这个.

编辑:发生在我使用声音样本的任何地方.如果我播放3个样本,情况就会发生.

编辑:@nobugz:是的,你认为你是对的.问题是持续时间过长的UI线程.因为我已经尝试过使用合并的音频文件,问题在于它的原始持续时间.

编辑:我通过放入Application.DoEvents()解决了这个问题;在每个示例播放命令之后.没有动摇:)

编辑:上面的解决方案并没有真正起作用.随着播放器样本数量增加,应用程序GUI再次陷入困境.已采用使用QueueUserWorkItem的解决方案.这仍然有待证明是一种令人满意的解决方案,因为发生了交叉折叠,即在旧的样品仍在播放时可以开始新的样品线程.

随着更多知识的出现,这将更新.

@H_489_2@

解决方法

在UI线程上调用PlaySync并不是那么好.当您的UI线程忙于等待声音完成时,它会使您的主窗口无响应,它不会像它应该那样抽取消息.如果这需要足够长的时间,Windows会进入并重叠窗口并显示“ghost”,它通常会在标题栏中显示“Not Responding”(如果有的话).这个鬼窗可能与你自己的窗口不太匹配,这可以解释“摇晃”.

使用Play()代替将解决该问题.但是给你一个新的,测序声音变得困难.从线程进行调用可以解决这两个问题.查看NAudio以更好地控制声音.

@H_489_2@ @H_489_2@
@H_489_2@
@H_489_2@

大佬总结

以上是大佬教程为你收集整理的c# – 音频播放时WinForms应用程序表单“摇动”全部内容,希望文章能够帮你解决c# – 音频播放时WinForms应用程序表单“摇动”所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。