我有一个应用程序,允许用户拍照并保存到隔离的存储空间以上传到服务器。 当用户单击提供的软件捕获按钮时,我正在尝试播放快门声。我能找到的所有文档都表明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);
}
}
使用仿真器和实际设备通过usb连接到pc进行调试时会出现此行为。
有人可以帮我解决这个令人沮丧的问题吗?
答案 0 :(得分:0)
现在回答我自己的问题,因为正在处理实例,导致此行为的是使用块。不知道我为什么要用它!