private void InjectStopOnClick(object sender, RoutedEventArgs e) { IsReading = !IsReading; if (IsReading) Task.Factory.StartNew(Read); }将这段代码改写成,当接收到数据时,触发Read
时间: 2024-01-24 22:05:34 浏览: 60
浅析C#中object-sender与EventArgs-e
要将代码更改为当接收到数据时触发Read方法,您需要使用适当的事件处理程序来处理数据接收事件。具体来说,您可以使用SerialPort或Socket类来处理串行端口或网络套接字上的数据接收事件。下面是一个使用SerialPort类的示例:
```
private SerialPort _serialPort;
public void InitializeSerialPort()
{
_serialPort = new SerialPort("COM1", 9600, Parity.None, 8, StopBits.One);
_serialPort.DataReceived += SerialPortDataReceived;
_serialPort.Open();
}
private void SerialPortDataReceived(object sender, SerialDataReceivedEventArgs e)
{
IsReading = true;
Read();
}
private void InjectStopOnClick(object sender, RoutedEventArgs e)
{
IsReading = false;
}
public void Read()
{
// Do something
}
```
在InitializeSerialPort方法中,我们创建一个SerialPort实例并将其DataReceived事件处理程序设置为SerialPortDataReceived方法。在SerialPortDataReceived方法中,我们设置IsReading为true并调用Read方法。在InjectStopOnClick方法中,我们将IsReading设置为false。在Read方法中,我们执行一些操作。当串口收到数据时,SerialPortDataReceived方法将被调用,从而设置IsReading为true并触发Read方法。当点击“Stop”按钮时,InjectStopOnClick方法将被调用,从而将IsReading设置为false,停止Read方法的执行。
阅读全文