2012-05-17 79 views
0

當我嘗試運行該程序時,它將引發此錯誤:未將對象引用設置爲對象的實例。代碼有問題嗎?幫幫我!如果沒有找到匹配System.NullReferenceException - 未將對象引用設置爲對象的實例

private void InitSpeechRecognition() 
     { 

      _audioSource = new KinectAudioSource 
      { 
       FeatureMode = true, 
       AutomaticGainControl = false, 
       SystemMode = SystemMode.OptibeamArrayOnly 
      }; 
      var ri = 
       SpeechRecognitionEngine.InstalledRecognizers(). 
       Where(r => r.Id == RecognizerId).FirstOrDefault(); 
      _engine = new SpeechRecognitionEngine(ri.Id); 
      var gb = new GrammarBuilder { Culture = new CultureInfo("en-US") }; 


      gb.Append(CommandMessage.Choices); 


      var g = new Grammar(gb); 
      _engine.LoadGrammar(g); 
      _engine.SpeechRecognized += SreSpeechRecognized; 

      _audioStream = _audioSource.Start(); 
      _engine.SetInputToAudioStream(_audioStream, 
              new SpeechAudioFormatInfo(
              EncodingFormat.Pcm, 16000, 16, 1, 
              32000, 2, null)); 
      _engine.RecognizeAsync(RecognizeMode.Multiple); 
     } 

     private void SreSpeechRecognized(object sender, SpeechRecognizedEventArgs e) 
     { 

      if (CommandMessage.Commands.ContainsKey(e.Result.Text)) 
      { 
       Application.Current.Dispatcher.Invoke(DispatcherPriority.Normal, 
        new Action(() => 
        Messenger.Default.Send(
         new CommandMessage { Command = CommandMessage.Commands[e.Result.Text] }))); 
      } 
     } 
+1

u能在異常 – Tilak

+1

哪條線的點提供堆棧跟蹤?其中許多可能會導致NullReferenceException!例如,** ri **可以爲null(因爲FirstOrDefault)。 –

+1

_engine = new SpeechRecognitionEngine(ri.Id); (對不起,是這一行!) – Jess

回答

2
var ri = SpeechRecognitionEngine.InstalledRecognizers(). 
      Where(r => r.Id == RecognizerId).FirstOrDefault(); 

這裏,FirstOrDefault()或者返回序列中的第一個對象或空值。 然後在下一行中嘗試訪問該對象的Id屬性,該屬性可能爲null。

在賦值後對空值執行檢查,並且只在ri不爲null時才使用ri。 例如

if (ri != null) 
    { 
    ... 
    } 

或者使用First()方法,而不是FirstOrDefault()和包圍所述代碼與try catch塊時序列爲空,來處理的情況。

但是你爲什麼變得空的原因可能是真正的問題。 ri爲null,因爲沒有安裝RecognizerId標識的識別器。我沒有看到你在設置它的代碼,所以看看那部分。

另外,還要看看例如,此網頁上,它可能只包含你所需要的:http://msdn.microsoft.com/en-us/library/system.speech.recognition.speechrecognitionengine.installedrecognizers.aspx

+0

如何檢查null? – Jess

+0

@Jess看我的編輯。 – akoso

+0

感謝您的信息。它真的節省了我的時間 – karthik

相關問題