我怎样才能得到哪个 "SerialPort" 触发了给定的 "DataReceived" 事件?
how can I get, which "SerialPort" has triggered the given "DataReceived" event?
我需要同时读取多个串口
我知道我应该使用多线程,但我不知道我应该怎么做。
我可以使用“SerialDataReceivedEventArgs”处理事件,将“.DataReceived”事件分配给 SerialPort 对象。
但是当它被触发时我看不到哪个端口触发了事件。所以我不知道应该读取哪些端口。
我试图将它放入一个新线程中,为线程分配特定的不同名称,但是当我使用它时:
private void CheckSerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
MessageBox.Show(Thread.CurrentThread.Name);
//this code runs on another thread. It is not running on the thread where the SerialPort was opened.
}
如果我尝试这个,同样的事情发生了:
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Invoke(new EventHandler(DisplayThreadText));
}
private void DisplayThreadText(object sender, EventArgs e)
{
//this code runs on the main thread. It is not running on the thread where the SerialPort was opened.
}
所以我的问题是我怎样才能得到哪个端口触发了给定的事件?
或者我应该使用其他方法?我不知道...
但如果你能帮助我,我将不胜感激。
Sender 对象是 SerialPort。
public static void Main()
{
SerialPort mySerialPort = new SerialPort("COM1");
mySerialPort.BaudRate = 9600;
mySerialPort.Parity = Parity.None;
mySerialPort.StopBits = StopBits.One;
mySerialPort.DataBits = 8;
mySerialPort.Handshake = Handshake.None;
mySerialPort.RtsEnable = true;
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
mySerialPort.Open();
Console.WriteLine("Press any key to continue...");
Console.WriteLine();
Console.ReadKey();
mySerialPort.Close();
}
private static void DataReceivedHandler(
object sender,
SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
Console.WriteLine("Data Received:");
Console.Write(indata);
}
我需要同时读取多个串口
我知道我应该使用多线程,但我不知道我应该怎么做。
我可以使用“SerialDataReceivedEventArgs”处理事件,将“.DataReceived”事件分配给 SerialPort 对象。
但是当它被触发时我看不到哪个端口触发了事件。所以我不知道应该读取哪些端口。
我试图将它放入一个新线程中,为线程分配特定的不同名称,但是当我使用它时:
private void CheckSerialPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
MessageBox.Show(Thread.CurrentThread.Name);
//this code runs on another thread. It is not running on the thread where the SerialPort was opened.
}
如果我尝试这个,同样的事情发生了:
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
Invoke(new EventHandler(DisplayThreadText));
}
private void DisplayThreadText(object sender, EventArgs e)
{
//this code runs on the main thread. It is not running on the thread where the SerialPort was opened.
}
所以我的问题是我怎样才能得到哪个端口触发了给定的事件?
或者我应该使用其他方法?我不知道...
但如果你能帮助我,我将不胜感激。
Sender 对象是 SerialPort。
public static void Main()
{
SerialPort mySerialPort = new SerialPort("COM1");
mySerialPort.BaudRate = 9600;
mySerialPort.Parity = Parity.None;
mySerialPort.StopBits = StopBits.One;
mySerialPort.DataBits = 8;
mySerialPort.Handshake = Handshake.None;
mySerialPort.RtsEnable = true;
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
mySerialPort.Open();
Console.WriteLine("Press any key to continue...");
Console.WriteLine();
Console.ReadKey();
mySerialPort.Close();
}
private static void DataReceivedHandler(
object sender,
SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
string indata = sp.ReadExisting();
Console.WriteLine("Data Received:");
Console.Write(indata);
}