2016-07-20 10 views
1

Ich bekomme diese Ausnahme auf ContinuousRecognitionSession.StartAsync Methode: "Operation ist nicht gültig aufgrund des aktuellen Status des Objekts." auch wenn das SpeechRecognizer-Objekt im Zustand "Idle" ist. Im Folgenden wird der Code-SnippetAusnahme: Die Operation ist aufgrund des aktuellen Objektstatus nicht gültig. auf Spracherkennung Objekt in UWP App

if (SpeechRecognizer.State == SpeechRecognizerState.Idle) 
    { 
      await SpeechRecognizer.ContinuousRecognitionSession.StartAsync(); 
    } 

Hier https://msdn.microsoft.com/en-us/windows/uwp/input-and-devices/enable-continuous-dictation dass Spracherkenner erwähnt in "Idle" -Zustand um StartAsync() aufzurufen sein muss. Was ist hier falsch?

+0

Der Code, den Sie gepostet haben, ist definitiv richtig. Es ist schwierig, das Problem nur mit diesem Code zu reproduzieren. Könntest du bitte einen [mcve] teilen? Haben Sie es mit dem offiziellen [Spracherkennungs- und Synthese-Beispiel] (https://github.com/Microsoft/Windows-universal-samples/tree/master/Samples/SpeechRecognitionAndSynthesis) versucht? Hat es das gleiche Problem? –

+0

Ich glaube nicht, dass andere Teile des Codes damit etwas tun müssten. Das ist der Code, den ich auf Knopfdruck habe. Ich habe eine einfache Schaltfläche, auf die ich StartAsync() klicken möchte, um die kontinuierliche Spracherkennung zu starten. Ich überprüfte das andere Beispiel, das Sie geteilt haben, und dort finde ich den gleichen Code. –

+0

Ich bekomme diese Ausnahme, wenn ich Debugging gemischt habe (verwaltet und nativ). Der Beispielcode hat dieses Problem nicht. –

Antwort

1

Obwohl Sie diese Ausnahme erhalten, wenn Sie versuchten, StartAsync Methode aufrufen, aber das Problem möglicherweise nicht hier. Wie Sie gesehen haben, verwendet es im offiziellen Beispiel auch diesen Code und es funktioniert gut.

Da ich die anderen Teile Ihres Codes nicht habe, ist es schwer zu sagen, was diese Ausnahme verursacht hat. Ich würde vorschlagen, dass Sie die Schritte in Continuous dictation befolgen und sich auf die Speech recognition and synthesis sample beziehen, um Ihre eigenen zu implementieren.

Einige wichtige Punkte sind hier:

  • Holt den Dispatcher für den UI-Thread, wenn Sie die Benutzeroberfläche Ihrer Anwendung in der kontinuierlichen Erkennung Event-Handler aktualisieren.
  • Initialisieren Sie den Spracherkenner.
  • Kompilieren Sie die integrierte Diktatgrammatik. Hinweis Spracherkennung erfordert mindestens eine Einschränkung, um ein erkennbares Vokabular zu definieren. Wenn keine Einschränkung angegeben ist, wird eine vordefinierte Diktatgrammatik verwendet. Siehe Speech recognition.
  • Richten Sie die Ereignis-Listener für Erkennungsereignisse ein.

Und ein möglicher Grund, dass Ihr Problem verursachen kann, fehlt Einschränkungen bei der Initialisierung zu kompilieren. Wir müssen SpeechRecognizer.CompileConstraintsAsync method anrufen, bevor wir die Spracherkennung beginnen.

Ref Dokument:

CompileConstraintsAsync muss immer vor RecognizeAsync oder RecognizeWithUIAsync genannt werden, auch wenn keine Einschränkungen in der Constraints Eigenschaft angegeben werden.

Wenn wir await speechRecognizer.CompileConstraintsAsync(); in Initialisierung verpasst haben, werden wir Operation is not valid due to the current state of the object. Ausnahme erhalten, wenn eine Erkennungssitzung starten.

+0

Ich habe CompileConstraintAsyc() im Page_Loading-Ereignis aufgerufen, so dass ich es in diesem Klickereignis nicht aufgerufen habe.Wenn ich es hier erneut anrief, löste ich das Problem. Vielen Dank Jay :) –