Speech recognition 使用RecognizeAsync启动识别器时出现NullReferenceException

Speech recognition 使用RecognizeAsync启动识别器时出现NullReferenceException,speech-recognition,sapi,Speech Recognition,Sapi,您好,我目前正在开发一个程序,该程序应该能够识别我的声音,然后写下它听到的声音,但当我运行代码并单击Button启动recEngine时,它显示“System.Speech.dll中发生了类型为'System.NullReferenceException'的未处理异常”,在tips中,它说var在之前可能是空的。但是我之前设置了变量,或者我做错了什么 这是密码 using System; using System.Windows.Forms; using System.Speech.Recogn

您好,我目前正在开发一个程序,该程序应该能够识别我的声音,然后写下它听到的声音,但当我运行代码并单击Button启动recEngine时,它显示“System.Speech.dll中发生了类型为'System.NullReferenceException'的未处理异常”,在tips中,它说var在之前可能是空的。但是我之前设置了变量,或者我做错了什么

这是密码

using System;
using System.Windows.Forms;
using System.Speech.Recognition;

namespace Voice_Recognition
{
    public partial class Form1 : Form
    {
        SpeechRecognitionEngine recEngine =  new SpeechRecognitionEngine();

        public Form1()
        {
            InitializeComponent();
        }

        private void BtnEnable_Click(object sender, EventArgs e)
        {
这是错误出现的地方

            recEngine.RecognizeAsync(RecognizeMode.Multiple);
            // BtnEnable.Enabled = false;
            BtnDisable.Enabled = true;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Choices commands = new Choices();
            commands.Add(new string[] { "say hello", "print my name" });
            GrammarBuilder Gbuilder = new GrammarBuilder();
            Gbuilder.Append(commands);
            Grammar grammar = new Grammar(Gbuilder);
            recEngine.LoadGrammarAsync(grammar);
            recEngine.SetInputToDefaultAudioDevice();
            recEngine.SpeechRecognized += recEngine_SpeechRecognized;
        }

        private void recEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            switch (e.Result.Text)
            {
                case "say hello":
                    Log.Text += "\nHello";
                    break;
                case "print my name":
                    Log.Text += "\nMyname";
                    break;

            }
        }

        private void BtnDisable_Click(object sender, EventArgs e)
        {
            BtnEnable.Enabled = true;
            BtnDisable.Enabled = false;
            recEngine.RecognizeAsyncStop();
        }
    }
 }
提示菜单中显示:

-在调用方法之前,请检查以确定对象是否为null

-使用“new”关键字创建对象实例


提前感谢

一些看起来很奇怪的事情:

  • 使用
    recEngine.SpeechRecognized+=neweventhandler(recEngine\u SpeechRecognized)
    而不是
    recEngine.SpeechRecognized+=recEngine\u SpeechRecognized

  • 在您开始识别时,语法可能尚未完成加载;使用
    LoadGrammarCompleted
    而不是
    loadgrammarsync
    (或者为
    LoadGrammarCompleted
    添加处理程序)

  • 我总是觉得为识别器显式指定cultureinfo(和语法)很方便,因为这样可以防止对所使用语言的误解