Ammar Shaukat Ответов: 2

Вызов функций одна за другой в событийном программировании


Я работаю над программным обеспечением, где программное обеспечение выдает команды для аппаратной панели, и как только команда выдана, ее ответ получен через несколько секунд . существуют различные функции для различных аппаратных команд, таких как
public void FunctionA()
{
     StartCommandA();
}
и другие функции по тому же шаблону, которые будут использоваться для выполнения других команд.
FunctionB();
FunctionC();
Как только мы получаем ответ Команды А , я вызываю другую функцию из ответа, но этот подход не очень хорош в соответствии с практикой шаблонов проектирования.

Все, что я хочу сделать, это составить список функций и вызвать все эти функции одну за другой, но следующая функция будет вызвана, как только я получу ответ от первых функций.

Что я уже пробовал:

Я попробовал сделать это с помощью Многоадресного делегата, но не могу понять, как мы можем вызвать get the list of functions, как только я добавлю все функции к этим делегатам. Это то, что я пытаюсь сделать с тех пор.
FunList funList_ConfigAndSerialTests = new FunList(StartSerialTest);

            funList_ConfigAndSerialTests += StartSerialTest;

            funList_ConfigAndSerialTests += StartMsrTest;

            funList_ConfigAndSerialTests += StartContactLessTest;

            //funList_ConfigAndSerialTests.Invoke();

            Delegate[] del = funList_ConfigAndSerialTests.GetInvocationList();

            foreach (Delegate item in funList_ConfigAndSerialTests.GetInvocationList())
            {
                while (true)
                {
                    if (IsResponseReceived == true)
                    {
                        // Call function here 
                    }
                }
            }

Richard Deeming

Как принимаются ответы? Наверное, тебе лучше было бы иметь дело с async / await подход.

Ammar Shaukat

вызов функции асинхронен, а ответ получен в отдельном методе с именем типа "OnResponse"

Richard Deeming

Является OnResponse обработчик событий? Если нет, то как он вызывается?

Ammar Shaukat

да это обработчик событий

2 Ответов

Рейтинг:
2

johannesnestler

взгляните на класс задач Класс Задач (System.Нарезание резьбы.Задачи)[^]
и к продолжению с методами.

Это то, что вы хотите: вызовите методы каждый в своей собственной задаче (потоке) - дождитесь выполнения метода, не блокируя остальную часть вашего приложения. После выполнения перейдите к следующему вызову метода (в его собственной задаче). Также смотрите новую синтаксическую поддержку этого шаблона (ключевые слова aync/await)


Ammar Shaukat

Мы уже работаем с задачами, а вызовы функций-это асинхронные вызовы. Вызов функции ответа принимается в отдельной функции, имя которой похоже на "OnResponse"

Рейтинг:
1

Ammar Shaukat

Составьте список

Action
Делегирует и добавляет код состояния для каждой функции . допустим, 0 средняя функция вызвана, а 1 средняя функция еще не вызвана. затем используйте запрос LINQ, чтобы проверить, какая функция была вызвана, а какая осталась.
Измените статус вызова функции с
OnReponse
Метод.