C# 如何等待语音合成完成

C# 如何等待语音合成完成,c#,.net,windows-phone-8.1,mediaelement,voice,C#,.net,Windows Phone 8.1,Mediaelement,Voice,我正在编写一个WP8.1应用程序,并尝试以以下方式输出语音: using (SpeechSynthesizer synth = new SpeechSynthesizer()) { var voiceStream = await synth.SynthesizeTextToStreamAsync("test 1"); MediaElement mediaElement = new MediaElement(); mediaElement.SetSource(voiceSt

我正在编写一个WP8.1应用程序,并尝试以以下方式输出语音:

using (SpeechSynthesizer synth = new SpeechSynthesizer())
{
    var voiceStream = await synth.SynthesizeTextToStreamAsync("test 1");
    MediaElement mediaElement = new MediaElement();
    mediaElement.SetSource(voiceStream, voiceStream.ContentType);
    mediaElement.AutoPlay = false;
    mediaElement.Volume = 1;
    mediaElement.IsMuted = false;                                
    mediaElement.Play();
}
using (SpeechSynthesizer synth = new SpeechSynthesizer())
{
    var voiceStream = await synth.SynthesizeTextToStreamAsync("test 2");
    MediaElement mediaElement = new MediaElement();
    mediaElement.SetSource(voiceStream, voiceStream.ContentType);
    mediaElement.AutoPlay = false;
    mediaElement.Volume = 1;
    mediaElement.IsMuted = false;                                
    mediaElement.Play();
}

这确实有效。。。但它似乎同时播放这两种音乐,所以听起来就像是回声。我看不到任何方法可以等待播放结束,或者在播放结束时收到通知-有吗?

MediaElement有一个MediaEnded事件。您可以使用TaskCompletionSource等待它:

var tsc = new TaskCompletionSource<bool>();
mediaElement.MediaEnded += (o, e) => { tsc.TrySetResult(true); }
mediaElement.Play();

await tsc.Task;
var tsc=new TaskCompletionSource();
mediaElement.MediaEnded+=(o,e)=>{tsc.TrySetResult(true);}
mediaElement.Play();
等待tsc任务;

(即使媒体播放以某种方式取消,请仔细检查事件get是否已触发。)

是否有异步版本的
Play
?还是事件?(我找不到
MediaElement.Play()
方法的文档)。我看不到Check event.BTW——mediaElement需要在可视树中。详细内容请参见博客。