离开我的secondDialog并继续使用RootDialog

时间:2017-06-09 23:15:22

标签: c# botframework

我有一个RootDialog,它包含3个路径BTCDialog,LTCDialog和ETHDialog。 当我通过BTCDialog这样的第一个对话框执行我的代码时,我需要在对话完成后离开(例如因为我需要启动LTCDialog) 我用

通过BTCDialog
await context.Forward(new BTCDialog(), this.ResumeAfterDialog, activity, CancellationToken.None);

当我结束时,我带着BTCDialog走了 context.Done(参数); 所以我在RootDialog

中执行了我的功能
private async Task ResumeAfterDialog(IDialogContext context, IAwaitable<object> result)
        {
            var activity = await result as Activity;

            context.Wait(MessageReceivedAsync);
        }

我的问题是当我的方法ResumeAfterDialog被执行时,我有一个信息(结果),其中包含我可以在RootDialog中使用的消息 如何写我的方法ResumeAfterDialog继续与我的用户对话?我想直接执行MessageReceivedAsync

方法

1 个答案:

答案 0 :(得分:0)

假设您的结果属于service_list.setHasFixedSize(true)类型,那么您只需调用IMessageActivity方法,而不是等待下一条消息。

MessageReceivedAsync

作为旁注,如果您的private async Task ResumeAfterDialog(IDialogContext context, IAwaitable<object> result) { var activity = await result as Activity; await MessageReceivedAsync(context, Awaitable.FromItem(activity)); } 对话框始终返回BTCDialog,则应将对话框更新为IDialog,这样您就可以将IMessageActivity方法更新为收到ResumeAfterDialog而不是IAwaitable<IMessageActivity>可以节省您的演员资格。