Приостановите цикл for, пока не будет вызван внешний метод обратного вызова. - PullRequest
0 голосов
/ 12 июня 2019

Нетехническое объяснение того, что я пытаюсь сделать:

У меня есть бот, который отправляет пользователю изображение, когда пользователь нажимает кнопку «Готово», он отправляет ему следующее изображение и так далее, пока не останется больше изображений.

Проблема:

Единственный способ прослушать эту кнопку с помощью API, который я использую, - использовать этот метод:

private static async void BotOnCallbackQueryReceived(object sender, CallbackQueryEventArgs callbackQueryEventArgs) {
        var callbackQuery = callbackQueryEventArgs.CallbackQuery;
        try {
            await Task.Run(() => {
                Bot.AnswerCallbackQueryAsync(callbackQuery.Id, "Answer has been submitted");
                string data = callbackQuery.Data.ToLower();
                if (data.Equals("notfound")){
                    //TODO He couldn't find the item
                }
                else if (data.Equals("done")) {

                }
            });
        }
    }

И, конечно же, подпишитесь на него через:

Bot.OnCallbackQuery += BotOnCallbackQueryReceived;

Для отправки изображения и меню у меня есть цикл for, который охватывает List<Item> (Item - это POCO).

await Task.Run(() => {
            // - Which buttons to send. MenuItem's constructor is (ButtonText, Callbackdata)
            List<MenuItem> menuItems = new List<MenuItem>();
            menuItems.Add(new MenuItem("Done", "done"));
            menuItems.Add(new MenuItem("Not found", "notFound"));
            //telegramLineItemObjects is a List<Item>
            foreach (Item item in telegramLineItemObjects) {
                string message = $"<b>Shelf Number:</b> {item.ShelfNumber}\n<b>Sku:</b> {item.Sku}\n<b>Barcode:</b> {item.Barcode}\n<b>Description:</b> {item.Description}\n<b>Quantity:</b> {item.Quantity}\n";
                //sendImage(Image URL, message, message parse mode)
                telegram.sendImage(item.Picture, message, ParseMode.HTML);
                Message sentMenu = telegram.sendMenu(message, menuItems);
            }
        }

Я хочу приостановить цикл for, дождаться вызова BotOnCallBackQueryReceived и возобновить цикл for.

Для этого мне нужен способ прослушивания, когда вызывается BotOnCallBackQueryReceived. Как мне это сделать?

...