【问题标题】:Cancel a speechrecognizer task取消语音识别器任务
【发布时间】:2014-02-25 23:02:48
【问题描述】:

我有一个 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. 点击ApplicationBar上的a按钮从照片库中进行选择

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    这是我对类似但不相同的问题的解决方案:Async network operations never finish

    【讨论】:

    • 是的,我收集了很多。好吧,做这个解决方法会让我很痛苦,因为感觉很不对劲,但我想这就是我最终会做的:) 谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 2012-06-26
    • 1970-01-01
    相关资源
    最近更新 更多