Кажется, прошло некоторое время с тех пор, как этот поток был активен, но, поскольку у него нет решения, я решил ответить на вопрос для полноты.
Ваша проблема с повторной инициализацией происходит из-за значения по умолчаниюРукопожатие, которое использует класс SerialPort, я не знаю, почему он это делает, но это действительно раздражает, вы можете обойти это, пропустив свойства SerialPort и углубившись в структуру DCB.
Я сделалкласс в C #, полный методов расширения для класса SerialPort, посмотрите мой ответ здесь на CodeProject
Если вы решите пойти по этому пути, я бы рекомендовал пропустить напрямуючерез SerialPort.Write к SerialPort.BaseStream.Write они принимают те же параметры, но я вполне уверен, что класс SerialPort выполняет там дополнительные ненужные действия инициализации, делает то же самое с SerialPort.Read.