Public Class AbortableBackgroundWorker Inherits BackgroundWorker Private _workerThread As Thread Protected Overrides Sub OnDoWork(e As DoWorkEventArgs) _workerThread = Thread.CurrentThread Try Using recognizer As New SpeechRecognitionEngine() Dim gb As New GrammarBuilder() gb.Culture = New System.Globalization.CultureInfo("en-US") gb.AppendDictation() Dim g As New Grammar(gb) g.Name = ("English Grammar") recognizer.LoadGrammarAsync(g) AddHandler recognizer.LoadGrammarCompleted, AddressOf recognizer_LoadGrammarCompleted AddHandler recognizer.SpeechDetected, AddressOf recognizer_SpeechDetected AddHandler recognizer.SpeechRecognized, AddressOf recognizer_SpeechRecognized AddHandler recognizer.RecognizeCompleted, AddressOf recognizer_SpeechFinished recognizer.SetInputToDefaultAudioDevice() recognizer.RecognizeAsync() ' Must use Console.ReadLine() if I want it to work properly! Console.ReadLine() End Using Catch generatedExceptionName As ThreadAbortException e.Cancel = True Thread.ResetAbort() End Try End Sub Public Sub Abort() If _workerThread IsNot Nothing Then _workerThread.Abort() _workerThread = Nothing End If End Sub Private sr As New Speech.Recognition.SpeechRecognitionEngine() Dim completed As Boolean Public Sub SetInputToDefaultAudioDevice() End Sub Public Sub recognizer_SpeechDetected(sender As Object, e As SpeechDetectedEventArgs) _Console.Register("Voice detected!") End Sub ' Handle the LoadGrammarCompleted event. Public Sub recognizer_LoadGrammarCompleted(sender As Object, e As LoadGrammarCompletedEventArgs) _Console.Register("Grammar loaded " & Convert.ToString(e.Grammar.Name)) End Sub ' Handle the SpeechRecognized event. Public Sub recognizer_SpeechRecognized(sender As Object, e As SpeechRecognizedEventArgs) _Console.Register("Voice! " & Convert.ToString(e.Result.Text)) End Sub Private Sub recognizer_SpeechFinished(sender As Object, e As RecognizeCompletedEventArgs) _Console.Register("No more voice!") Me.Abort() If (Me.IsBusy = False) Then _Console.Register("False!") End If End Sub End Class
var
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)