https://Darsman.com/blog/action-in-csharp/