小编Lee*_*roy的帖子

从Scorable,如何调用对话框然后清除堆栈?

我正在研究.NET中的机器人.我有一个scorable,我想从一个对话框D1,然后最终得到一个空堆栈.或者用另一种方式,我想发射一个新的对话框,但不是打断然后恢复我所处的位置(像最可靠的例子),最后得到一个空白的对话框(如取消可行的例子).

可能相关点:它触发的对话框(D1)依次在堆栈上放置另一个对话框(D2),我也希望在堆栈清除之前正常工作.

有一个取消可行的例子:https://docs.microsoft.com/en-us/bot-framework/dotnet/bot-builder-dotnet-global-handlers .其目的是清除对话框堆栈.

我想这样做,但先调用另一个对话框.我在我的scorable的PostAsync()方法中试过这个:

var interruption = dialog_D1.Void<object, IMessageActivity>();
_task.Call(interruption, null);
await _task.PollAsync(token);
_task.Reset();
Run Code Online (Sandbox Code Playgroud)

然而,只要D1调用D2,就会触发PollAsync()并清除对话框堆栈.这意味着当您响应D2时,堆栈为空,RootDialog接受输入.

我也在我的scorable的PostAsync()方法中试过这个:

var interruption = dialog_D1.Void<object, IMessageActivity>();
_task.Call(interruption, AfterCallingDialog);
await _task.PollAsync(token);

...

private async Task AfterCallingDialog(IDialogContext context, IAwaitable<object> result)
{
   _task.Reset();
}
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,机器人错误地出现"IDialog方法执行完成了通过IDialogStack指定的多个简历处理程序".一击到_task.Call()

任何人都可以建议修复此问题或让我知道一个不同的方法?

谢谢!

背风处

c# botframework

6
推荐指数
1
解决办法
582
查看次数

标签 统计

botframework ×1

c# ×1