Есть форма и кнопка.
Сценарий:
Пользователь вводит команду, нажимает на кнопку, отправляется запрос на сервер.
Сервер принимает команду и выполняет в cmd, а затем возвращает результат.
Результат появляется на форме
По-моему, с этим справляется обычный telnet/ssh.
Если для самообразования, то на стороне сервера создаёшь TCPListener, на стороне клиента TCPClient, создаёшь соединение, по нажатию кнопки пишешь в поток команду, на сервере её запускаешь.
Гугли примеры TCP chat.
Этот урок займёт кучу времени, чтобы показать как. Если показывать как делать в ASP.NET Core. Но за то это будет самый толковый пример, так как потом можно расширять функционал не переписывая все свои велосипеды. Про какую форму речь? Про Windows Forms проект или WPF? В общем, нужно в UI использовать асинхронным методы, чтобы не зависал UI и async await -- это самый современный вариант (не BackgroundWorker, не Thread, и даже не ThreadPool).
Есть книги ASP.NET Core MVC 2 с примерами на C# для профессионалов | Фримен Адам Конкурентность в C#. Асинхронное, параллельное и многопоточное программирование | Клири Стивен Основы Windows Presentation Foundation | Андерсон Крис WPF. Windows Presentation Foundation в .NET 4.5 с примерами на C# 5.0 для профессионалов | Мак-Дональд М. (новее не нашёл на русском языке, да и вряд ли новее нужна)
Дай знать, если тебе нужен пример на ASP.NET Core, могу набросать, а то вдруг тебе не нужно, не хочу тратить время зря. И укажи, какой UI Framework ты хотел бы использовать.