2017-04-08 68 views
0

这是我的基本代码什么是切换从或退出formFlow到对话框中博特框架

enter image description here 的最佳途径formFlow工作正常,并检查,如果条件之后,就应该去别的部分,它在它的部分,但在其他部分写这行代码

    await Conversation.SendAsync(activity,() => new AskMeAnything()); 

AskMeAnything是一个类实现Idialog。问题是,它再次去/调用formflow而不是跳到上面提到的对话框中。

我读了关于IdialogStack,但无法理解如何删除堆栈顶部的对话框或与之相关的东西。

我需要帮助移动到其他对话框,而无需循环到formflow。

感谢

回答

1

你打电话Conversation.SendAsync(...)你实际上是为你的谈话创建一个根对话框中的第一次。每次连续调用机器人将仍然进入控制器,但将被路由到堆栈顶部的对话框。

因此,当您第二次调用Conversation.SendAsync(...)时,实际上是在尝试更改堆栈中的根对话框。我不认为这是可能的,这就是为什么你的表单被再次调用。

要解决这个问题,我会创建一个不同的对话框,并使该对话框成为根对话框。在此根对话框中,您可以调用您的表单和任何其他对话框。

+0

感谢评论,只是想了解你,让我说我创建了一个根dilaog并调用了一次子对话框,所以下一次,根对话框将在堆栈顶部,然后第一个子对话框将会在它下面,那么我的新子对话框怎么会被调用? ..任何示例或详细的解释将帮助 –

+0

不,这是不正确的。当您使用“调用”或“转发”方法从根对话框启动子对话框时,子对话框将置于堆栈的顶部。所有消息都来自控制器,指向堆栈的顶部,在此操作之后将成为子对话框。所以消息将不再在根对话框中处理。一旦对话完成后,您可以调用“完成”方法结束对话框,然后将子对话框从堆栈中取消,使根对话框成为堆栈顶部。 –

+0

谢谢Xeno - 如果你通过看到上面的图片给出我的概率的解决方案,我会更加高兴..我打电话给“makerootdialog”使用Conversation.sendasync()调用表单流。一旦表单流完成,我打电话给它的.Done()方法。根据新的请求,它会转到其他部分(如图所示),在那里我使用Conversation.SendAsync(...)调用另一个对话框,但是再次调用Formflow。你能帮助我吗? –