Qt has a neat functionality to do timed action with Lambda.

An action can be done after a delay with a single line of code:

```
    QTimer::singleShot(10, [=](){
        // do some stuff
    });

```

Although I haven't found equivalent in C#.

---

The closest I got was 

```
Timer timer = new Timer();
timer.Interval = 10;
timer.Elapsed += (tsender, args) => { 
  // do some stuff 
  timer.Stop();
};
timer.Start();

```

But it's far from (visually) clean. 

Is there a better way to achieve this ?

The use case is sending data on a serial line to some hardware, upon a button click or action, it is often required to send a command, and a packet a few ms later.

---

Solution with a helper function:

```
    public void DelayTask(int timeMs, Action lambda)
    {
        System.Timers.Timer timer = new System.Timers.Timer();
        timer.Interval = timeMs;
        timer.Elapsed += (tsender, args) => { lambda.Invoke(); };
        timer.AutoReset = false;
        timer.Start();
    }

```

Called by

```
DelayTask(10, () => /* doSomeStuff...*/ );

```