Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#bot框架中创建循环_C#_Botframework - Fatal编程技术网

在C#bot框架中创建循环

在C#bot框架中创建循环,c#,botframework,C#,Botframework,我正在设计一个查询数据库的机器人,但我遇到了麻烦 [LuisIntent("ProjectInfo")] public async Task projectInfo(IDialogContext context, LuisResult result) { PromptDialog.Text(context,AfterPromptMethod,"Please enter your project name", attempts: 100);

我正在设计一个查询数据库的机器人,但我遇到了麻烦

[LuisIntent("ProjectInfo")]
        public async Task projectInfo(IDialogContext context, LuisResult result)
        {
            PromptDialog.Text(context,AfterPromptMethod,"Please enter your project name", attempts: 100);
        }
        async Task AfterPromptMethod(IDialogContext context, IAwaitable<string> userInput)
        {
            var InputText = await userInput;
            string projectName = InputText.ToString();
            if (projectName!= null)
            {
                TestInfo MI = new TestInfo();
                if (MI.FindProject(projectName) == 0)
                {
                    await context.PostAsync($"Project Found. What do you want to know ?");
                }
                else
                {
//PromptDialog.Text(context,AfterPromptMethod,"Pleaase check your product name and try again", attempts: 100);
                    await context.PostAsync($"Project Not Found. Check your project name and try again.");

                }
            }
            context.Wait(MessageReceived);
        }
[LuisIntent(“ProjectInfo”)]
公共异步任务项目信息(IDialogContext上下文,LuisResult结果)
{
Text(上下文,AfterPromptMethod,“请输入您的项目名称”,尝试次数:100);
}
异步任务AfterPromptMethod(IDialogContext上下文,IAwaitable userInput)
{
var InputText=等待用户输入;
字符串projectName=InputText.ToString();
if(projectName!=null)
{
TestInfo MI=新的TestInfo();
if(MI.FindProject(projectName)==0)
{
wait context.PostAsync($“找到项目。您想知道什么?”);
}
其他的
{
//Text(上下文,AfterPromptMethod,“请检查您的产品名称并重试”,尝试次数:100);
等待上下文。PostAsync($“未找到项目。请检查项目名称,然后重试。”);
}
}
Wait(MessageReceived);
}
这是我想放循环的地方,projectInfo被调用,但是当它到达if语句,而project没有找到时,它什么也不做。我试图插入“context.Wait(projectInfo)”,但没有任何帮助。我还尝试使用提示对话框,如果是,它会循环返回,如果不是,它会进入主菜单。然而,我还不能完全理解这种方法


有人有什么建议或更好的方法吗?

问题在于
上下文。等等(…)
。当点击
PromptDialog
时,将创建一个不同的对话框,该对话框将处理提示。但是这个方法中的代码执行并不仅仅存在于此。它一直持续到方法的末尾,下一步就是
上下文。wait(messagereceived)
。此行尝试指定下一条消息应在MessageReceived方法中处理。因此,你有两个地方的下一条消息预计会去,这是不可能的


要解决您的问题,请添加一个
返回直接在PromptDialog之后。这将确保不会命中context.wait(..)。

如果要再次转到projectInfo方法,则只需调用它:)

我更新了你的代码

[LuisIntent("ProjectInfo")]
public async Task projectInfo(IDialogContext context, LuisResult result)
{
    PromptDialog.Text(context,AfterPromptMethod,"Please enter your project name", attempts: 100);
}

async Task AfterPromptMethod(IDialogContext context, IAwaitable<string> userInput)
{
    var InputText = await userInput;
    string projectName = InputText.ToString();
    if (projectName!= null)
    {
        TestInfo MI = new TestInfo();
        if (MI.FindProject(projectName) == 0)
        {
            await context.PostAsync($"Project Found. What do you want to know ?");
            context.Wait(MessageReceived);
        }
        else
        {
            await context.PostAsync($"Project Not Found. Check your project name and try again.");
            await this.projectInfo(context, null);
        }
    }
}
[LuisIntent(“ProjectInfo”)]
公共异步任务项目信息(IDialogContext上下文,LuisResult结果)
{
Text(上下文,AfterPromptMethod,“请输入您的项目名称”,尝试次数:100);
}
异步任务AfterPromptMethod(IDialogContext上下文,IAwaitable userInput)
{
var InputText=等待用户输入;
字符串projectName=InputText.ToString();
if(projectName!=null)
{
TestInfo MI=新的TestInfo();
if(MI.FindProject(projectName)==0)
{
wait context.PostAsync($“找到项目。您想知道什么?”);
Wait(MessageReceived);
}
其他的
{
等待上下文。PostAsync($“未找到项目。请检查项目名称,然后重试。”);
等待这个.projectInfo(context,null);
}
}
}

是否会返回;跳回projectInfo?或者只是阻止它到达context.WaitIn projectInfo函数只是添加context.wait(AfterPromptMethod);)我同意这一说法,它似乎是可行的