【问题标题】:How can I play audio async using MediaElement?如何使用 MediaElement 异步播放音频?
【发布时间】:2013-08-16 02:51:52
【问题描述】:

我相信我想做的是异步播放音频。我正在为 Windows 8 编写一个应用程序,它要求每次按下按钮时都播放音频文件。我遇到的问题是,文件会播放,但如果它还没有完成播放并且你按下按钮,它就不会再发声了。

XAML
<MediaElement x:Name="KickBasicAudio"
              Source="Assets/Drums/Dance/KickBasic.wav"
              AutoPlay="False" />
<Button Content="KICK" ClickMode="Press" Click="KickBasicPlay"/>

C#
private void KickBasicPlay(object sender, RoutedEventArgs e)
{
    KickBasicAudio.Play();
}

【问题讨论】:

    标签: c# visual-studio xaml visual-studio-2012


    【解决方案1】:

    在这种情况下,SoundPlayer 可能是更好的选择,因为这允许 Asyc 播放

    using System.Media; //The reference needed.
    
    private SoundPlayer _player = new SoundPlayer("file");
    
    private void KickBasicPlay(object sender, RoutedEventArgs e)
    {
        _player.Play();
    }
    

    【讨论】:

    • 不知道这一点,这绝对是我回答的更好选择。
    【解决方案2】:

    我认为您需要一个后台工作线程来执行此操作。试试这个。

    using System.ComponentModel; //This is the reference needed.
    
    private void KickBasicPlay(object sender, RoutedEventArgs e)
    {
        BackgroundWorker thread = new BackgroundWorker();
        thread.DoWork += (sender, e) => { KickBasicAudio.Play() };
    }
    

    【讨论】:

    • Javascript 中不使用 BackgroundWorkers 吗?我使用 C#/XAML。
    • 我必须使用参考吗?
    • 即使我包含引用,我仍然收到错误:找不到类型或命名空间名称“BackgroundWorker”(您是否缺少 using 指令或程序集引用?)
    • private void KickBasicPlay(object sender, RoutedEventArgs e) { BackgroundWorker thread = new BackgroundWorker(); thread.DoWork += (sender, e) => { KickBasicAudio.Play() }; }
    • 我不确定你的问题,你确定你把 using 指令正确吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-08
    相关资源
    最近更新 更多