取消语音识别器任务



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

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. 单击ApplicationBar上的 a 按钮以从照片库中进行选择

在所有三种情况下,我都想取消语音识别器任务。我尝试删除await并将IAsyncOperation<SpeechRecognitionResult>转换为Task<SpeechRecognitionResult>,但由于我没有创建任务并且该方法不采用取消令牌,因此我不知道如何取消它,即使现在我有了任务对象。

如果我不取消任务并离开页面,则会出现应用级别异常。有没有办法显式取消任务或等待的操作?

无法取消不可取消的异步操作。如果该方法不接受取消令牌,则基本上无法取消它。您可以做的是:

  1. 放弃使用 WithCancellationWithTimeout 的操作。
  2. 处理SpeechRecognizer(这是一个IDisposable)并抓住它的ObjectDisposedException

这是我对一个类似但不相同的问题的解决方案:异步网络操作永远不会完成

相关内容

  • 没有找到相关文章

最新更新