如何在 .NET 中检测通过串行端口或以太网连接的设备状态的变化

How to detect change in the state of device connected through serial port or ethernet in .NET

我有一个应用程序可以通过串行端口和以太网连接到控制器。控制器不断地向 PC 抛出数据。我正在用 C# 编写应用程序。我在 c# 中创建了 SerialPort 对象,并在 dataReceived 方法中接收数据。同样对于以太网,我使用 TCPListener 及其方法 startAcceptClient 来接受来自客户端的连接。

现在,我的问题是控制器是否断电或从 PC 上拔下电缆;如何在应用程序中检测这些事件?

我对 TCPListener 不是很熟悉,但是对于 SerialPort 我使用了一个计时器,每次滴答我都会检查端口是否仍然打开

private void ComTimer_Tick(object sender, EventArgs e)
    {
        if (SerialPort.IsOpen)
        {
            dostuff
        }
        else if (!SerialPort.IsOpen)
        {
            ComCheckTimer.Stop();
            MessageBox.Show("Connection lost"); 
    }
}

还有定时器

ComCheckTimer = new Timer();
ComCheckTimer.Tick += new EventHandler(ComTimer_Tick);
ComCheckTimer.Interval = 1000;

这将创建一个每 1000 毫秒计时一次的计时器