使用 NumberPrompt 处理需要用户输入的多个问题 C#

问题描述 投票:0回答:1

我有多个从数据库获取的问题要问用户。如果我使用

for
循环,所有问题都会立即触发,不允许用户输入答案。然而,使用关键字
return
允许用户输入他们的答案。我不确定如何使用
NumberPrompt
来解决需要用户输入的多个问题。

我计划在

for
循环中执行下面的代码,但是
for
循环不会等待用户输入,并且使用
return
关键字会中断
for
循环。

var showQuestionMessageText = $"Here's your question: {ConnectDatabase.question[i]}";

var showQuestionMessage = MessageFactory.Text(showQuestionMessageText, showQuestionMessageText, InputHints.IgnoringInput);
await stepContext.Context.SendActivityAsync(showQuestionMessage, cancellationToken);

var showOptionsMessageText = $"Here's your options: \n1. {ConnectDatabase.option1[i]} \n2. {ConnectDatabase.option2[i]} \n3. {ConnectDatabase.option3[i]} \n4. {ConnectDatabase.option4[i]}";
var showOptionsMessage = MessageFactory.Text(showOptionsMessageText, showOptionsMessageText, InputHints.IgnoringInput);
await stepContext.Context.SendActivityAsync(showOptionsMessage, cancellationToken);

return await stepContext.PromptAsync(nameof(NumberPrompt<int>), new PromptOptions { Prompt = MessageFactory.Text("Please choose one of the options, using 1-4 to type in your answer")}, cancellationToken);
c# azure botframework
1个回答
0
投票

使用递归方法:

// Method to start asking questions recursively
private async Task AskQuestionsAsync(IDialogContext context, int index, CancellationToken cancellationToken)
{
    if (index < ConnectDatabase.question.Count)
    {
        var showQuestionMessageText = $"Here's your question: {ConnectDatabase.question[index]}";
        var showQuestionMessage = MessageFactory.Text(showQuestionMessageText, showQuestionMessageText, InputHints.IgnoringInput);
        await context.SendActivityAsync(showQuestionMessage, cancellationToken);

        var showOptionsMessageText = $"Here's your options: \n1. {ConnectDatabase.option1[index]} \n2. {ConnectDatabase.option2[index]} \n3. {ConnectDatabase.option3[index]} \n4. {ConnectDatabase.option4[index]}";
        var showOptionsMessage = MessageFactory.Text(showOptionsMessageText, showOptionsMessageText, InputHints.IgnoringInput);
        await context.SendActivityAsync(showOptionsMessage, cancellationToken);

        // Prompt user for input
        var promptOptions = new PromptOptions
        {
            Prompt = MessageFactory.Text("Please choose one of the options, using 1-4 to type in your answer")
        };
        var result = await context.PromptAsync(nameof(NumberPrompt<int>), promptOptions, cancellationToken);

        // Handle user's response here if needed

        // Recursively ask the next question
        await AskQuestionsAsync(context, index + 1, cancellationToken);
    }
}

// Call this method to start asking questions
private async Task AskMultipleQuestionsAsync(DialogContext context, CancellationToken cancellationToken)
{
    await AskQuestionsAsync(context, 0, cancellationToken);
}
© www.soinside.com 2019 - 2024. All rights reserved.