2014-02-25 35 views
2

我有一個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的一個按鈕,從照片庫

在所有選擇我想取消三種情況下的語音識別器任務。 我嘗試刪除await並將IAsyncOperation<SpeechRecognitionResult>轉換爲Task<SpeechRecognitionResult>,但由於我沒有創建任務並且該方法沒有取消取消標記,所以我不知道如何取消它,即使現在我已經完成了任務目的。

如果我不取消該任務並離開該頁面,則會收到應用程序級別的異常。有沒有辦法明確取消任務或等待手術?

回答

2

You can't cancel a non-cancelable async operation。 如果該方法不取消取消標記,則基本上不能取消它。 你可以做的是:

  1. 使用WithCancellationWithTimeout放棄操作。
  2. 處置SpeechRecognizerIDisposable)並記下ObjectDisposedException

這裏是我的解決方案類似,但不一樣的,問題:Async network operations never finish

+1

是的,我收集儘可能多的。那麼,這會讓我很難做這個解決方法,因爲它感覺錯了,但我想這就是我最終會做的:)謝謝! –