我必须创建一个应用程序,它每 200 毫秒从 PLC 读取寄存器。为此,我正在使用类似的东西:
SerialPort port = new SerialPort();
private void Form1_Load(object sender, EventArgs e)
{
port.ReceivedBytesThreshold = 21;
timer1.Interval = 200;
timer1.Start();
}
private void ProcessTimer_Tick(object sender, EventArgs e)
{
if (dataReceived)
{
dataReceived = false;
port.Read(buffer_rx, 0, 21);
TranslateValues();
}
if (port.IsOpen && connectected)
{
// sends command for a new reading
port.Write(buffer_tx, 0, length);
}
}
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Invoke(new EventHandler(DoUpdate));
}
void DoUpdate(object sender, EventArgs e)
{
dataReceived = true;
}
问题是我的应用程序不时冻结。当我调试它时,调试器将我指向 port.Read(),但不会抛出任何异常。
我曾尝试使用 try-catch 块,但没有被捕获,并且也没有被捕获,time1.Interval = 2000
但它也没有工作。
我的问题是,为什么我的应用程序在 port.Read() 处冻结,但没有捕获任何异常?我怎样才能解决这个问题?