Как реализовать: пока нажата кнопка — выполнять команду?
Вы входитет в цикл в UI потоке и намертво его утилизируете этим же циклом. Если вы присмотритесь повнимательней, то заметите что кнопка на UI вовсе не отжимается после того как вы ее отпустили. Нужно вынести цикл в отдельный поток, например так:void Button1MouseDown(object sender, MouseEventArgs e) //кнопка нажата
{
 Task.Run(() => {
      flag = true;
      while(flag)
      {
        Port_Write(1); //посылаем 1 байт на контроллер
      }
});
}
P.S. Я не в курсе микроконтролерной кухни, но может не стоит слать команды с такой частотой?
А вы то забыли указать доп.условие - как выйти из цикла? Как приложение догадается о том , что кнопка уже не нажата, если вечный цикл?, вот и зависает.