Q:

Calling functions one after other in event driven programming

I'm working on a software where software issues commands for hardware panel and once a command is issued, its response received after few seconds . there are different functions for different hardware commands like 
public void FunctionA()
{
    StartCommandA();
}

and other functions on the same pattern that will be used to run other commands.
FunctionB();
FunctionC();

Once we receive the response of command A , I invoke the other function from the response but this approach is not good as per design pattern practices. 
All i want to do is to make a list of functions and invoke all these functions one after other, But next function will be called once i get response of first functions.
I tried this by using Multicast delegate but I'm unable to find out how we can call get the list of functions once i add all functions to that delegates. This is what i'm trying do since.
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 
                }
            }
        }

A:

The simplest way to do this is to call the functions one by one:
FunctionA();
FunctionB();
FunctionC();

Each method will be called only after the previous has returned.
But you said you want to call the next function after the previous one has a response. Now that sounds like your functions run asynchronously. I strongly suggest you use the async keyword to mark your functions and make them return a Task<ResonseType>. You can learn about this here.
You'll then be able to do something like this:
await FunctionA(); // you obviously want to do something with the returned response
                   // I do not know your requirements so I did not show that part
await FunctionB();
await FunctionC();

