2017-03-16 1 views
0

を持ってボットフレームワーク - 。PromptDialog.ChoiceはC#を使用している間、私はダイアログを持っており、ユーザーが関心のある質問を選択できるようにPromptDialog.Choiceを使用して、ボットの枠組みの中で、重複回答

しかし、それが実行されるとき、I

enter image description here

public async Task StartAsync(IDialogContext context) 
{ 
    this.ShowOptions(context); 
} 

private void ShowOptions(IDialogContext context) 
{ 
    PromptDialog.Choice(
     context, 
     this.OnOptionSelected, 
     new List() { ImageOption, ToolOption }, 
     "Please select one of the following category.", 
     "Not a valid option", 
     3); 
} 

private async Task OnOptionSelected(IDialogContext context, IAwaitable result) 
{ 
    string optionSelected = await result; 
    switch (optionSelected) 
    { 
     case ImageOption: 
      context.Call(new ImgRelated(), this.ResumeAfterOptionDialog); 
      break; 

     case ToolOption: 
      context.Call(new ToolPBmDailog(), this.ResumeAfterOptionDialog); 
      break; 
    } 
} 

誰もがアイデアを持って、次の画像に見られるように、重複した回答を得ましたか。

答えて

2

ShowOptionsは非同期メソッドである必要があり、StartAsyncでは、それを呼び出すのではなく、context.Wait(this.ShowOptions)で呼び出す必要があります。

public async Task StartAsync(IDialogContext context) 
{ 
    context.Wait(this.MessageReceivedAsync); 
} 

public async virtual Task ShowOptions(IDialogContext context, IAwaitable<IMessageActivity> result) 
{ 
    var message = await result; 

    PromptDialog.Choice<string>(
     context, 
     this.OnOptionSelected, 
     new List() { ImageOption, ToolOption }, 
     "Please select one of the following category.", 
     "Not a valid option", 
     3); 
} 
0

あなたはそれを実行する前に、ユーザからの入力を待つようにOnOptionSelected方法を確認する必要があります。また、ShowOptionsメソッドを非同期にしてください。それ以外の場合は、ShowOptionsメソッドがStartAsyncメソッドにvoidを返すため、例外が発生する可能性があります。 IAwaitable<IMessageActivity>は、ユーザーからの応答を待ちます。次のように試してみてください。

public async Task StartAsync(IDialogContext context) 
    { 
     await this.ShowOptions(context); 
    } 

    private async Task ShowOptions(IDialogContext context) 
    { 
     PromptDialog.Choice(context, this.OnOptionSelected, 
        new List() { ImageOption, ToolOption }, 
        "Please select one of the following category.", 
        "Not a valid option", 3); 
    } 

    private async Task OnOptionSelected(IDialogContext context, IAwaitable<IMessageActivity> result) 
    { 
     string optionSelected = await result; 
     switch (optionSelected) 
     { 
      case ImageOption: 
       context.Call(new ImgRelated(), this.ResumeAfterOptionDialog); 
       break; 

      case ToolOption: 
       context.Call(new ToolPBmDailog(), this.ResumeAfterOptionDialog); 
       break; 
     } 
    } 
関連する問題

 関連する問題