C# 控制台语音识别在启动后立即退出

C# 控制台语音识别在启动后立即退出,c#,mono,.net-core,voice-recognition,C#,Mono,.net Core,Voice Recognition,我试着遵循构建语音识别C#app的教程,唯一的区别是我想要一个控制台app,而不是Win Form app,所以我写了以下代码: using System; using System.Speech.Recognition; //using System.Speech.Synthesis; namespace Voice_Recognation { class Program { static void Main(string[] args) {

我试着遵循构建语音识别C#app的教程,唯一的区别是我想要一个
控制台
app,而不是Win Form app,所以我写了以下代码:

using System;
using System.Speech.Recognition;
//using System.Speech.Synthesis;

namespace Voice_Recognation
{
    class Program
    {
        static void Main(string[] args)
        {
            SpeechRecognitionEngine recEngine = new SpeechRecognitionEngine();
            recEngine.SetInputToDefaultAudioDevice();  

            Choices commands = new Choices();
            commands.Add(new string[] { "say Hi", "say Hello"});
            GrammarBuilder gb = new GrammarBuilder();
            gb.Append(commands);
            Grammar g = new Grammar(gb);

            recEngine.LoadGrammarAsync(g);
            recEngine.RecognizeAsync(RecognizeMode.Multiple);

            recEngine.SpeechRecognized += recEngine_SpeechRecognized;

        }

                // Create a simple handler for the SpeechRecognized event
        static void recEngine_SpeechRecognized (object sender, SpeechRecognizedEventArgs e)
        {
            Console.WriteLine("Speech recognized: {0}", e.Result.Text);
            switch(e.Result.Text){
                case "Red":
                    Console.WriteLine("you said hi"); 
                break;
                default:
                break;
            }
        }

    }
}
并使用mono项目编译如下:

c:\mcs /reference:System.Speech.dll Program.cs
System.Speech.dll
添加到文件夹项目后,生成
Program.exe
文件

一旦我在终端运行
程序
,它就会直接结束,而不会给我任何说话的机会

我有两个问题:

我错过了什么,我做错了什么

如何以更好的方式添加“.dll”文件,我尝试将其添加到
Project.json
文件,如下所示,但没有成功,尽管在运行
dotnet restore
时没有出现任何错误:

  "frameworks": {
    "netcoreapp1.0": {
                  "bin": {
            "assembly": "D:/2016/Speech/CORE/System.Speech.dll"
        },
     }
   }

我通过添加
线程解决了第一部分。Sleep
让线程有足够的时间继续侦听,另一个选择是使用
while(true)使其无休止地循环

我仍然无法解决第二部分,即如何使VS代码识别程序集文件的存在

如果有人感兴趣,新的完整代码如下,可以找到更全面的代码:


由于您使用的是异步方法,所以需要等待某个事件,以防止从main退出。例如,您可以使用Console.ReadLine。
using System;
using System.Speech.Recognition;
using System.Threading;
//using System.Speech.Synthesis;

namespace Voice_Recognation
{
    class Program
    {
        static void Main(string[] args)
        {
            SpeechRecognitionEngine recEngine = new SpeechRecognitionEngine();
            recEngine.SetInputToDefaultAudioDevice();  

            Choices commands = new Choices();
            commands.Add(new string[] { "say Hi", "say Hello"});
            GrammarBuilder gb = new GrammarBuilder();
            gb.Append(commands);
            Grammar g = new Grammar(gb);

            recEngine.LoadGrammarAsync(g);


            recEngine.SpeechRecognized += recEngine_SpeechRecognized;
            Console.WriteLine("Starting asynchronous recognition...");
            recEngine.RecognizeAsync(RecognizeMode.Multiple);

            // Wait 30 seconds, and then cancel asynchronous recognition.
            Thread.Sleep(TimeSpan.FromSeconds(30));

            // or 
            // while(true);
        }

        // Create a simple handler for the SpeechRecognized event
        static void recEngine_SpeechRecognized (object sender, SpeechRecognizedEventArgs e)
        {
            Console.WriteLine("Speech recognized: {0}", e.Result.Text);
            switch(e.Result.Text){
                case "say Hello":
                    Console.WriteLine("you said hi"); 
                break;
                default:
                break;
            }
        }

    }
}