2017-05-15 22 views
0

MSボットフレームワークの例を使用して別のダイアログを呼び出そうとすると、次のように表示されます。error これは私のコードです:ボットフレームフォワード型引数エラー

using System; 
 
using System.Threading; 
 
using System.Threading.Tasks; 
 
using Microsoft.Bot.Builder.Dialogs; 
 
using Microsoft.Bot.Connector; 
 

 
namespace ReadMeBot.Dialogs 
 
{ 
 
    [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); 
 
      } 
 

 
      // 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) 
 
     { 
 
      
 
     } 
 
    } 
 
}

どのように私はこの問題を解決することができますか?私は周りのグーグルと誰もこの問題を持っているようだ。私は間違って何をしていますか?

答えて

0

別のダイアログに転送するので、このダイアログで待つ必要はありません。あなたは履歴書でcontext.Waitを呼び出すと思うでしょう。

[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); 
    } 
} 
+0

こんにちはエリック、コメントありがとうございました:

物事はあなたがこのような何かにあなたのコードを変更した場合、予想通りに動作するはずです。しかし、上記のコードは問題を解決しませんでした。 – bsmith

+0

質問にInternetSearchDialogを投稿してください。 –