Я не вижу, где вы закрываете порт.
Проблема для меня не в этом (даже если вам нужно немного изменить код), но, вероятно, вы звоните port.Open();
, когда порт еще открыт
Из MSDN
На один объект SerialPort может существовать только одно открытое соединение.
(я не могу сказать вам почему, потому что у меня недостаточно информации). Имейте также в виду, что метод close требует некоторого времени для фактического закрытия порта, фактически вы должны блокировать основной поток, пока порт не будет закрыт. (возможно, используя Thread.Join)
Из MSDN
Лучшая практика для любого приложения - подождать некоторое время после вызова метода Close, прежде чем пытаться вызвать метод Open, так как порт не может быть закрыт мгновенно.
для получения дополнительной информации
http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.open.aspx