C# 如何从MessageController中调用普通对话框和LuisDialog
我有一个要求,基于某些条件,我需要调用普通对话框或C# 如何从MessageController中调用普通对话框和LuisDialog,c#,botframework,azure-language-understanding,C#,Botframework,Azure Language Understanding,我有一个要求,基于某些条件,我需要调用普通对话框或LuisDialog,我无法实现同样的要求 if(condition == 1) return await Conversation.SendAsync(message, () => new SampleLuisDialog()); else return await Conversation.SendAsync(message, () => new SimpleIDialog()); 问题是: 当它满足第2个条件时,它执行
LuisDialog
,我无法实现同样的要求
if(condition == 1)
return await Conversation.SendAsync(message, () => new SampleLuisDialog());
else
return await Conversation.SendAsync(message, () => new SimpleIDialog());
问题是:当它满足第2个条件时,它执行
simpledialog
中的逻辑。当它满足第一个条件而不是进入SampleLuisDialog
时,它再次进入simpledialog的startAsync
。
我做错了什么?在第一个调用的对话框中,您必须调用Context.Done。在此之前,用户被“卡住”在该对话框中
因此,在启动另一个对话框之前,必须“关闭”第一个调用的对话框。这里只有一个条件。使用调试器,查看条件
变量的值是什么。只有一个条件,当我说第二个条件时,我指的是itOK的其他部分,然后我的注释的其他部分仍然适用。如何验证当满足条件时,else子句是否仍在执行?试试调试器!是的,它进入else块,但不符合任何LUIS意图(即,LUIS对话框中的任何方法)。好吧,它是一个异步方法,因此不必立即执行它。您是否尝试过在SampleLuisDialog
constructor中放置断点?同意。如果我们有一个根对话框,并且在它里面我们尝试调用几个其他的子对话框,那么这很好。但是在我的例子中,我试图从MessageController.cs中调用多个对话框