C# 子对话框被中断时,中断不起作用
使用v4.7.2 我有以下情况:C# 子对话框被中断时,中断不起作用,c#,botframework,C#,Botframework,使用v4.7.2 我有以下情况: 主对话框 帮助对话框(组件对话框-瀑布) 对话框A(组件对话框-瀑布) 对话框B(组件对话框-瀑布) 对话框C(组件对话框-瀑布) 在我的MainDialog中,我有一个OnInterruptDialogAsync的实现,它检查用户是否说“Help”,我们将启动一个HelpDialog 在我的OnInterruptDialogAsync中,我正在执行以下操作: 我有一个对话框名称列表,其中包括用户提示 我检查ActiveDialog是否在该列表中 我返回
- 主对话框
- 帮助对话框(组件对话框-瀑布)
- 对话框A(组件对话框-瀑布)
- 对话框B(组件对话框-瀑布)
- 对话框C(组件对话框-瀑布)
- 我有一个对话框名称列表,其中包括用户提示
- 我检查ActiveDialog是否在该列表中
- 我返回中断操作等待
- 如果ActiveDialog不在该列表-->中,则表示没有提示
- 我返回中断操作恢复
下面的工作正常很好
- 对话框A正在运行
- 对话框A提示用户一个问题
- 用户键入“Help”并触发中断
- 帮助对话框运行并向用户显示菜单,然后完成
- 将触发RepromptDialogAsync(),并再次询问用户未回答的提示
- 对话框B正在运行
- 在对话框B的最后一步
- 我们结束对话框-->等待EndDialogAsync()
- 我们开始对话C-->返回等待sc.BeginDialogAsync(“对话C”)李>
- 对话框C正在运行,并提示用户一个问题
- 用户键入“Help”并触发中断
- 帮助对话框运行并向用户显示菜单,然后完成
- 预计对话框C的提示将被重新提示,但:
- 错误:DialogSet.RepromptDialogAsync():找不到id为“dialog C”的对话框
Marc我假设问题在下面,我建议检查调试程序中的Context.Dialogs和Context.Parent.Dialogs。我怀疑问题是由于启动对话框的上下文造成的。您可能正试图从“主”上下文(对于我
dc
)中重新编译对话框,但该对话框不存在,因为您是从瀑布(对于我step
)启动它的。我在尝试从瀑布内部取消所有对话框时遇到了这个问题,必须使用step.parent.cancelAllDialogs()代码>。也就是说,我有一个类似的中断重新编译,没有遇到这个问题。我只是使用了dc.repromptDialog()
,所以我不确定这是否对您有帮助。另外,我的主对话框是ActivityHandler的一部分,而不是ComponentDialog。我的中断函数在我的主bot.js文件中。我是故意这么做的,所以我的代码是这样的:if(topIntent===HELP\u intent&topIntentScore>0.5){wait dc.context.sendActivity(helpMessage);wait dc.repromptDialog();return true;}
@MarcAsmar我将开始进行一些测试/调试,但我相信可能发生的情况是,在调用“帮助”的中断之前,DialogState没有被保存。如果您在对中断执行操作之前手动保存DialogState?…或调用EndDialog
将从对话框堆栈中删除对话框C,我认为这更可能。您可以不调用EndDialog
,而只使用return wait sc.BeginDialogAsync(“Dialog C”)代码>