2016-02-26 11 views
0

Я новичок здесь и с C#. Я пытаюсь использовать C# для распознавания речи с помощью малины, используя пример кода, найденный в Интернете. Моя программа вылетает, когда я вызываю TextBlock.Text из метода. Может быть, это потому, что это обработчик событий. Как я могу это решить? Если я использую эти три строки кода в другой точке программы (метод не используется как обработчик событий), он работает. Извините, но я новичок, и я не знаю, как работает этот язык, если вы можете исправить код, я бы понял его лучше.Обработчики событий C# и TextBlock

namespace RPiVoice 
{ 

    public sealed partial class MainPage : Page 
    { 
     private const int RED_LED_PIN = 5; 
     ... 

     public MainPage() 
     { 
      this.InitializeComponent(); 
      Unloaded += MainPage_Unload 
      initializeSpeechRecognizer(); 
      initializeGPIO(); 
     } 

     private void initializeGPIO() 
     { 
         gpio = GpioController.GetDefault(); 

      // // Initialize GPIO Pins 
      redPin = gpio.OpenPin(RED_LED_PIN); 
      greenPin = gpio.OpenPin(GREEN_LED_PIN); 
      bedroomLightPin = gpio.OpenPin(BEDROOM_LIGHT_PIN); 

      redPin.SetDriveMode(GpioPinDriveMode.Output); 
      greenPin.SetDriveMode(GpioPinDriveMode.Output); 
      bedroomLightPin.SetDriveMode(GpioPinDriveMode.Output); 

      // Write low initially, this step is not needed 
      redPin.Write(GpioPinValue.Low); 
      greenPin.Write(GpioPinValue.Low); 
      bedroomLightPin.Write(GpioPinValue.Low); 
     } 
     // Initialize Speech Recognizer and start async recognition 
     private async void initializeSpeechRecognizer() 
     { 

      // Initialize recognizer 
      var recognizer = new SpeechRecognizer(new Windows.Globalization.Language("it-IT")); 

      // Set event handlers -> the problem should be here 
      recognizer.StateChanged += RecognizerStateChanged; 
      recognizer.ContinuousRecognitionSession.ResultGenerated += RecognizerResultGenerated; 

     } 

     // Recognizer generated results 
     private async void RecognizerResultGenerated(SpeechContinuousRecognitionSession session, SpeechContinuousRecognitionResultGeneratedEventArgs args) 
     { 
      ... 


        await Window.Current.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async() => { 
         this.Stato.Text = "test"; //this make the program crash! 
        }); 

       }; 
} 
+0

Вы получаете исключение, которое вы можете нам показать? – Gabe

ответ

0

Я считаю, что вам нужно ссылаться на нить, что текстовое поле было создано в связи с этим должно быть записано как:.

this.Dispatcher.Invoke((Action)(() => 
{ 
     this.Stato.Text = "test"; 
})); 

Вместо:

   await Window.Current.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, async() => { 
        this.Stato.Text = "test"; //this make the program crash! 
       }); 

 Смежные вопросы

  • Нет связанных вопросов^_^