单击按钮然后播放声音,暂停用户界面,如果您发送垃圾邮件,按钮会继续播放? [复制]

Posted

技术标签:

【中文标题】单击按钮然后播放声音,暂停用户界面,如果您发送垃圾邮件,按钮会继续播放? [复制]【英文标题】:Clicking a button then playing a sound, pauses the UI and if you spam the button continuously plays? [duplicate] 【发布时间】:2017-05-27 16:53:29 【问题描述】:

我一直试图让这个按钮做我想做的事。我希望它在按下它时播放声音,这就是我设法做到的。但是,就像每次按下按钮时应用程序都会冻结,将所有注意力都放在声音上,等等。所以基本上我的目标是让按钮播放声音,而无需让 UI 必须停止并允许它播放,之前继续。我也想知道是否有办法在按下按钮时发出按钮播放声音,但是当再次按下时,当前声音会停止并再次播放,以防止它播放“X”次单击按钮等的点击次数.

这是我的代码:

    public static void ButtonSound()
    
        SoundPlayer _sound = new SoundPlayer();
        try
        
            _sound.Stop();
            _sound.SoundLocation = path + "ButtonTap.wav";
            _sound.Load();
            _sound.PlaySync();
        
        catch
        

        
        finally
        
            _sound.Dispose();
        
    

和按钮代码:

    private void Button()
    
        SoundPlayers.ButtonSound();
    

注意,我在另一个类中有我的 SoundPlayer,我正在使用 DelegateCommands 来引用我的 Button() 方法等。我也在使用 .wav 文件。另外,有没有更有效的方法来完成我想要完成的任务?如果您还需要什么,尽管问。

谢谢!

【问题讨论】:

【参考方案1】:

您的 UI 冻结了,因为这是您致电 _sound.PlaySync() 时所要求的。

查看SoundPlayer documentation,您可以使用Play() 方法:

使用新线程播放 .wav 文件,并首先加载 .wav 文件 如果尚未加载。

使用此方法还可以解决重复播放声音的问题,因为您将不再需要排队。

此外,您使用Try-Finally-Dispose 执行的操作可以使用using 进行简化,因此您的代码将如下所示:

public static void ButtonSound()

    using (var _sound = new SoundPlayer())
    
        _sound.SoundLocation = path + "ButtonTap.wav";
        _sound.Play();
    

请注意,您的 _sound.Stop() 没有意义,因为您是在新对象上调用它,但仅在新对象上调用 Play() 会使旧声音停止,然后播放新声音。

此外,文档说Play() 会加载尚未加载的文件,这就是我跳过_sound.Load() 调用的原因。

【讨论】:

如果 "[...] 只是处理 SoundPlayer 就会让它停止。" 是真的,那么你不能真正将 Play 方法的调用放在一个像你一样使用块,或者? (我知道您想展示如何使用块而不是 try-finally-dispose,但在您的回答中,它似乎有点缺陷......) 我对此进行了测试并且它确实有效,所以当我说处置它会停止声音时我错了。似乎使声音停止的原因是再次调用Play()。谢谢! 好的,如果我向按钮发送垃圾邮件,那么它会在 x 次点击中播放完全相同的声音? 我在这里进行了测试,但异步播放并没有做到这一点。这就是我所说的“只需在新对象上调用 Play() 将使旧声音停止,然后播放新声音。”

以上是关于单击按钮然后播放声音,暂停用户界面,如果您发送垃圾邮件,按钮会继续播放? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何一键暂停/播放多个 MediaPlayer 对象?

使用播放/暂停/停止按钮控制 Flash 视频的声音

如何在播放/暂停控制功能中停止无限循环

在完成播放之前再次单击播放音频文件

将声音添加到 SoundBoard 恶作剧程序

单击按钮时的音频播放问题