对c#Handler有疑问吗?

对c#Handler有疑问吗?,c#,event-handling,C#,Event Handling,我有c语言的代码# startRecognition是一种语音识别方法,用于加载语法并在此处生成识别处理程序: recContext.Recognition += new _ISpeechRecoContextEvents_RecognitionEventHandler(handleRecognition); 现在我有一个问题,当我在方法运行之前调用方法startRecognition时,两个处理程序(识别处理程序和记号处理程序)都工作得很好。如果识别出一个单词,则调用handlerRecog

我有c语言的代码#

startRecognition是一种语音识别方法,用于加载语法并在此处生成识别处理程序:

recContext.Recognition += new _ISpeechRecoContextEvents_RecognitionEventHandler(handleRecognition);
现在我有一个问题,当我在方法运行之前调用方法startRecognition时,两个处理程序(识别处理程序和记号处理程序)都工作得很好。如果识别出一个单词,则调用handlerRecognition方法

但是,当我在方法startRecognition之前调用该方法run时,两个方法似乎都运行良好,但识别处理程序从未执行过!甚至当我看到单词被识别时(因为它们发生在Windows语音识别应用程序上)


识别处理程序总是被调用,我能做些什么?

如果在运行之前不调用StartRecognition,处理程序永远不会连接起来。因此,显而易见的解决方案是确保连接识别处理程序的代码行被调用

最简单的解决方案是最好的:)

我在run()方法中创建了识别处理程序

我在运行后调用startreconion方法,它成功了


谢谢罗伯特·哈维

如果你在跑步前不打电话给StartRecognition,那么处理者永远不会被连接上。因此,显而易见的解决方案是确保连接识别处理程序的代码行被调用。您能否生成一个最小的测试用例(不超过10-20行)来举例说明您的问题,还要解释为什么需要使用事件而不是简单的回调委托?应用程序是多线程的吗?@Robert Harvey:我需要在run方法之后运行加载语法的部分。我可能会尝试在之前和之后执行处理程序:P@Pierre-Luc Champigny:我运行了一个python应用程序,它使用在这段代码中生成的dll。
recContext.Recognition += new _ISpeechRecoContextEvents_RecognitionEventHandler(handleRecognition);