在Windows Phone 8中取消语音合成

我在我的应用中添加了一个语音合成。 它有效,但问题是我无法取消语音…例如,当我导航到另一个页面时,语音继续…所以,我调用CancelAll()方法取消当前语音但发生exception而且我不知道为什么。 你知道这是什么问题吗?

例外

A first chance exception of type 'System.Threading.Tasks.TaskCanceledException' occurred in mscorlib.ni.dll An exception of type 'System.Threading.Tasks.TaskCanceledException' occurred in mscorlib.ni.dll and wasn't handled before a managed/native boundary An exception of type 'System.Threading.Tasks.TaskCanceledException' occurred in mscorlib.ni.dll and wasn't handled before a managed/native boundary The program '[2576] TaskHost.exe' has exited with code -1 (0xffffffff). 

我的代码:

  private SpeechSynthesizer synth = new SpeechSynthesizer(); protected override void OnBackKeyPress(CancelEventArgs e) { //I tried to cancel also here but it's the same exception... } //method called when I press a button Cancel private void ButtonCancelSpeech(object sender, EventArgs eventArgs) { try { synth.CancelAll(); } catch (TaskCanceledException) { //I arrive in this exception } } private async void BtnSpeech_Click(object sender, EventArgs e) { IEnumerable voices = from voice in InstalledVoices.All where voice.Language.Substring(0, 2).Equals(LanguageApp.GetLangage2Characters()) select voice; if (voices.ElementAt(0) != null) { // Set the voice as identified by the query. synth.SetVoice(voices.ElementAt(0)); await synth.SpeakTextAsync(_place.Description); } } 

谢谢

由于您要取消异步操作,因此可以使用从IAsyncAction返回的SpeakTextAsync而不是使用await

 private SpeechSynthesizer synth = new SpeechSynthesizer(); private IAsyncAction task; private void ButtonCancelSpeech(object sender, EventArgs eventArgs) { try { //cancel the async task itself task.Cancel(); } catch (TaskCanceledException) { } } private void BtnSpeech_Click(object sender, EventArgs e) { IEnumerable voices = from voice in InstalledVoices.All where voice.Language.Substring(0, 2).Equals(LanguageApp.GetLangage2Characters()) select voice; if (voices.ElementAt(0) != null) { // Set the voice as identified by the query. synth.SetVoice(voices.ElementAt(0)); task = synth.SpeakTextAsync(_place.Description); } }