我有一个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();
这会在语音和屏幕文本中提示用户他可以说“拍摄”拍照。其他三个选项是:
ApplicationBar
ApplicationBar
上的按钮,从照片库中选择在所有三种情况下,我都想取消语音识别器任务。
我尝试删除await
并将IAsyncOperation<SpeechRecognitionResult>
转换为Task<SpeechRecognitionResult>
,但由于我没有创建任务且该方法没有取消令牌,我不知道如何取消它,即使现在我有任务对象。
如果我不取消任务并离开页面,我会收到应用程序级异常。有没有办法可以明确取消任务或等待操作?
答案 0 :(得分:2)
You can't cancel a non-cancelable async operation。 如果该方法不采用取消令牌,则基本上不能取消它。 你能做的是:
WithCancellation
或WithTimeout
放弃操作。SpeechRecognizer
(IDisposable
)并抓住ObjectDisposedException
。以下是我对类似问题的解决方案:Async network operations never finish