取消语音识别任务

时间:2014-02-25 14:11:16

标签: c# windows-phone-8 async-await

我有一个WP8应用程序,它使用SpeechRecognizer的无UI版本。我使用以下代码:

string[] commands = { "Shoot" };
recognizer = new SpeechRecognizer();
await speechOutput.SpeakTextAsync("You can say Shoot.");
recognizer.Grammars.AddGrammarFromList("captureCommands", commands);
SpeechRecognitionResult result = await recognizer.RecognizeAsync();

if (result.Text == "Shoot")
   cam.CaptureImage();

这会在语音和屏幕文本中提示用户他可以说“拍摄”拍照。其他三个选项是:

  1. 点按屏幕进行拍摄
  2. 点击ApplicationBar
  3. 中的拍摄按钮
  4. 点击ApplicationBar上的按钮,从照片库中选择
  5. 在所有三种情况下,我都想取消语音识别器任务。 我尝试删除await并将IAsyncOperation<SpeechRecognitionResult>转换为Task<SpeechRecognitionResult>,但由于我没有创建任务且该方法没有取消令牌,我不知道如何取消它,即使现在我有任务对象。

    如果我不取消任务并离开页面,我会收到应用程序级异常。有没有办法可以明确取消任务或等待操作?

1 个答案:

答案 0 :(得分:2)

You can't cancel a non-cancelable async operation。 如果该方法不采用取消令牌,则基本上不能取消它。 你能做的是:

  1. 使用WithCancellationWithTimeout放弃操作。
  2. 处理SpeechRecognizerIDisposable)并抓住ObjectDisposedException

  3. 以下是我对类似问题的解决方案:Async network operations never finish