Современный способ написать это будет:
async void PASECVGet(object sender, EventArgs e) //Ugh, async void, but events!
{
if (!SCP.IsOpen) {
MessageBox.Show("Open the Serial Port");
} else {
dataout = "get pase cv";
await Task.Delay(100);
SCP.Write(dataout + "\r");
blGetPASECV = true;
}
}
Затем отбросьте оставшуюся часть существующего кода. В настоящее время в C # существует множество возможностей, позволяющих вам сосредоточиться на выполняемой работе . Эра ручного создания таймеров, потоков и т. Д. Начинает угасать (надеюсь)
Я также беспокоюсь о blGetPASECV
выше, потому что а) он, похоже, использует системы венгерского именования и б) он, кажется, для отслеживания текущего состояния . Если у вас есть состояния, было бы более нормально моделировать это с использованием одного перечисления и поля, а не нескольких независимых логических значений.