C# Bot框架转发类型参数错误

C# Bot框架转发类型参数错误,c#,botframework,C#,Botframework,我得到以下消息 尝试使用MS Bot框架示例调用其他对话框时。这是我的代码: 使用系统; 使用系统线程; 使用System.Threading.Tasks; 使用Microsoft.Bot.Builder.Dialogs; 使用Microsoft.Bot.Connector; 名称空间ReadMeBot.Dialogs { [可序列化] 公共类RootDialog:IDialog { 公共任务StartSync(IDialogContext上下文) { Wait(MessageReceived

我得到以下消息 尝试使用MS Bot框架示例调用其他对话框时。这是我的代码:

使用系统;
使用系统线程;
使用System.Threading.Tasks;
使用Microsoft.Bot.Builder.Dialogs;
使用Microsoft.Bot.Connector;
名称空间ReadMeBot.Dialogs
{
[可序列化]
公共类RootDialog:IDialog
{
公共任务StartSync(IDialogContext上下文)
{
Wait(MessageReceivedAsync);
返回Task.CompletedTask;
}
专用异步任务消息ReceivedAsync(IDialogContext上下文,IAwaitable结果)
{
var活动=等待作为活动的结果;
如果(activity!=null&&activity.Text.ToLower()包含(“是什么”))
{
等待
context.Forward(new InternetSearchDialog(),this.ResumeAftInternetSearchDialog,activity,CancellationToken.None);
}
//算点东西让我们回去
int length=(activity.Text??string.Empty).length;
//将我们的回复返回给用户
wait context.PostAsync($“您发送了{activity.Text},长度为{length}个字符。谢谢!”);
Wait(MessageReceivedAsync);
}
InternetSearchDialog(IDialogContext上下文,IAwaitable结果)之后的专用异步任务ResumeAfterInternetSearchDialog
{
}
}

}
由于您正在转发到另一个对话框,因此不需要在此对话框中等待。您需要调用上下文。但请在简历中等待

如果您将代码更改为以下内容,则一切应按预期进行:

[Serializable]
public class RootDialog : IDialog<object>
{
    public Task StartAsync(IDialogContext context)
    {
        context.Wait(MessageReceivedAsync);

        return Task.CompletedTask;
    }

    private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
    {
        var activity = await result as Activity;

        if (activity != null && activity.Text.ToLower().Contains("what is"))
        {
            await
                context.Forward(new InternetSearchDialog(), this.ResumeAfterInternetSearchDialog, activity, CancellationToken.None);
        }
        else
        {
            // calculate something for us to return
            int length = (activity.Text ?? string.Empty).Length;

            // return our reply to the user
            await context.PostAsync($"You sent {activity.Text} which was {length} characters. Thank you!");
            context.Wait(MessageReceivedAsync);
        }       
    }

    private async Task ResumeAfterInternetSearchDialog(IDialogContext context, IAwaitable<string> result)
    {
        context.Wait(MessageReceivedAsync);
    }
}
[可序列化]
公共类RootDialog:IDialog
{
公共任务StartSync(IDialogContext上下文)
{
Wait(MessageReceivedAsync);
返回Task.CompletedTask;
}
专用异步任务消息ReceivedAsync(IDialogContext上下文,IAwaitable结果)
{
var活动=等待作为活动的结果;
如果(activity!=null&&activity.Text.ToLower()包含(“是什么”))
{
等待
context.Forward(new InternetSearchDialog(),this.ResumeAftInternetSearchDialog,activity,CancellationToken.None);
}
其他的
{
//算点东西让我们回去
int length=(activity.Text??string.Empty).length;
//将我们的回复返回给用户
wait context.PostAsync($“您发送了{activity.Text},长度为{length}个字符。谢谢!”);
Wait(MessageReceivedAsync);
}       
}
InternetSearchDialog(IDialogContext上下文,IAwaitable结果)之后的专用异步任务ResumeAfterInternetSearchDialog
{
Wait(MessageReceivedAsync);
}
}

嗨,埃里克,谢谢你的评论。但是,上面的代码并没有解决问题。请在您的问题中发布您的InternetSearchDialog。