Как завершить поток, в котором прослушивается порт
Зачем используете именно Thread? Почему не BackgroundWorker с while (!worker.CancellationPending)?
Abort не прерывает исполнение потока, а лишь сообщает ему, что кто-то хочет его прервать.
Замените while(true) на while(Thread.CurrentThread.ThreadState & (ThreadState.AbortRequested)