在Microsoft框架中有可能进行多个瀑布式对话吗?
我有一个根对话框(来自ComponentDialog (WaterfallDialog)),它接受用户的初始输入。我想使用这个对话来启动外部服务的登录进程。一旦登录成功,我想启动一个基于用户初始输入的特定瀑布对话。
例如,用户说
Flow1 -->启动根对话(用于登录过程)->开始Flow1(瀑布)对话框 Flow2 -->启动根对话(用于登录过程)->开始Flow2(瀑布)对话框
我试过这样做,但是当我从根对话中调用BeginDialogAsync时,它就挂起了
return await stepContext.BeginDialogAsync("flow1", null, cancellationToken);请让我知道我在这里错过了什么,谢谢
发布于 2020-06-15 19:05:42
发布于 2021-05-27 11:29:16
我知道这篇文章有点老了,但是我没有看到任何其他完整的答案,所以我就这么做了。
在阅读原始问题时,我可以看到您可能希望如何将其实现为从主对话框中启动的单独对话框,在这种情况下,您需要创建单独的ComponentDialogs来实现自己的WaterfallDialog来解决问题。
但是,如果您询问是否可以在单个WaterfallDialogs中拥有多个ComponentDialog,当然可以。为此,必须为每个WaterfallDialog分配一个Id属性值,方法如下:
var flow1steps= new WaterfallStep[] { step1, step2, step3 };
var flow2steps = new WaterfallStep[] { step1, step2, step3 };
var flow1Dialog= new WaterfallDialog(nameof(WaterfallDialog), flow1steps) { Id = "flow1" };
var flow2Dialog = new WaterfallDialog(nameof(WaterfallDialog), flow2steps) { Id = "flow2" };在这个场景中,如果您想从"flow1Dialog“开始,可以将构造函数中的InitialDialogId设置为"flow1Dialog”,如下所示:
InitialDialogId = "flow1Dialog";然后,当您准备将对话框重定向到"flow2“时,可以使用flow2 2 dialog的WaterfallDialog.Id。例如,要从根对话框或flow2Dialog中的任何其他步骤重定向到flow1Dialog,请执行以下操作:
return await stepContext.BeginDialogAsync("flow2");BeingDialogAsync()与ReplaceDialogAsync()
您可以使用BeginDialogAsync(),但是除非需要控制才能最终返回到原始对话框,否则可能会导致对话框堆栈混乱,而这是您不想要的。使用ReplaceDialogAsync()将堆栈上的当前对话框替换为新的对话框,这可以使管理循环和重定向变得更容易,因为堆栈中没有杂乱的旧对话框,您不想在某个时候处理这些对话框。
https://stackoverflow.com/questions/62267723
复制相似问题