缩略图卡context.Wait()

时间:2017-09-08 03:54:09

标签: c# botframework

我想问一下如何正确使用缩略图卡片按钮。我希望按钮专门用context.Wait(methodName)调用一个新方法。 现在我有缩略图卡按钮的代码:

thumbnailCard.Buttons = new[] {new CardAction(
                        ActionTypes.MessageBack, $"Account", value: id
                        )};
var msg = context.MakeMessage();
msg.AttachmentLayout = AttachmentLayoutTypes.Carousel;
msg.Attachments = cardAttachment.ToList();

await context.PostAsync(msg);
context.Wait(methodName); **I want this to be called when button was clicked**

但显然我无法点击按钮时触发该方法。 PS:我实际上是bot框架的新手,所以任何帮助都将受到赞赏。感谢。

注意:可能的重复不是我遇到的问题。我没有通过thumbnail.Buttons调用方法,而是我使用context.Wait(MethodName)插入需要传递给另一个方法的值,但是我们有关于如何正确实现它的相同方法,但它没有回答问题为什么我无法将我插入到上下文中的方法回火。等等。

2 个答案:

答案 0 :(得分:0)

你真的需要使用context.Wait还是你正在尝试的?你可以使用它,但它会在点击按钮后等待消息,所以它似乎不是你想要的。请回复,我可以根据您的需要调整我的答案。

看起来你只想按一下按钮后执行一个方法。为此,您可以使用以下代码并根据需要进行调整,这是我能想到的最简单的实现。如果您有任何后续问题或需要其他问题,请告诉我们:

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

        IMessageActivity reply = context.MakeMessage();


        if (activity.Text.ToLowerInvariant() == "do stuff")
        {

            activity.CreateReply("I have done the stuff");
            await context.PostAsync(activity);
        }
        else
        {
            List<CardAction> cardButtons = new List<CardAction>();

            CardAction Button = new CardAction
            {
                Title = "do stuff",
                //Type = ActionTypes.ImBack;  //this will display "do stuff" in the chat window
                Type = ActionTypes.PostBack,  //same behavior except "do stuff" not displayed
                Value = "do stuff"
            };

            cardButtons.Add(Button);

            HeroCard Card = new HeroCard()
            {
                Buttons = cardButtons
            };
            Attachment plAttachment = Card.ToAttachment();

            reply.Attachments.Add(plAttachment);

            await context.PostAsync(reply);
        }

        context.Wait(MessageReceivedAsync);
    }

答案 1 :(得分:0)

感谢大家的回复。我已使用ActionTypes.PostBack解决了该问题,但未使用MessageBackImBack

是的,我仍然使用Context.Wait(method)