音效不在后台播放

时间:2014-08-17 22:05:53

标签: windows-phone-8

我有一个应用程序,允许用户拍照并保存到隔离的存储空间以上传到服务器。 当用户单击提供的软件捕获按钮时,我正在尝试播放快门声。我能找到的所有文档都表明soundeffect.play是异步的,所以当逻辑继续时,声音应该继续在后台播放,但是在我的情况下声音要么部分播放要么没有时间播放,除非我在播放后放置断点()或在调用play()之后添加一个Thread.Sleep(x)。

private void BtnCaptureClick(object Sender, RoutedEventArgs E)
{
    if (_PhotoCamera != null)
    {
    PlayShutter();

    _FileName = Guid.NewGuid().ToString(); //A breakpoint here will allow sound to play
    _PhotoCamera.CaptureImage();
    }
}

private void PlayShutter()
{
    var Info = App.GetResourceStream(new Uri("Assets/camera.wav", UriKind.Relative));

    try
    {
    _Effect = SoundEffect.FromStream((Info.Stream));
    FrameworkDispatcher.Update();

    using (_Effect)
    {
        if (_Effect.Play())
        {
    //Thread.Sleep(1000); //uncommenting this will allow sound to play if duration < 1000
        }
    }
    }
    catch (Exception Ex)
    {
    MessageBox.Show(Ex.Message);
    }
}
  • 我已尝试明确使用soundeffectinstance,但行为不会改变。
  • 我尝试过显式地异步调用Play(),没有改变行为。
  • 我尝试过异步调用以下代码,行为没有变化。
  • 我经常尝试调用FrameworkDispatcher.Update,行为没有变化。
  • 我尝试将项目中的.wav文件设置为“Resource”但是当我调用_Effect = SoundEffect.FromStream((Info.Stream))时会导致nullreferenceexception;因为Info为null。(即使是绝对路径)

使用仿真器和实际设备通过usb连接到pc进行调试时会出现此行为。

有人可以帮我解决这个令人沮丧的问题吗?

1 个答案:

答案 0 :(得分:0)

现在回答我自己的问题,因为正在处理实例,导致此行为的是使用块。不知道我为什么要用它!