Execute not blocking async shell command in C#

note, May 22, 2023, on Mitja Felicijan's blog

Execute a shell command in async in C# while not blocking the UI thread.

private async Task executeCopyCommand()
{
  await Task.Run(() =>
  {
    var processStartInfo = new ProcessStartInfo("cmd", "/c dir")
    {
      RedirectStandardOutput = true,
      UseShellExecute = false,
      CreateNoWindow = true
    };

    var process = new Process
    {
      StartInfo = processStartInfo
    };

    process.Start();
    process.WaitForExit();
  });
}

Make sure that async is present in the function definition and await is used in the method that calls executeCopyCommand().

private async void button_Click(object sender, EventArgs e)
{
  await executeCopyCommand();
}


Other notes