我正在使用C#中的串行端口读取数据,如下所示:
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
如果函数DataReceivedHandler是计算密集型的,有没有办法确保在接收到下一个数据时它不会等待前一个函数完成,而是用新数据启动另一个DataReceivedHandler实例? / p>
答案 0 :(得分:2)
嗯,我不认为Gh0st22的回答是同时发生的。首先,已经从串行端口类内部的线程池调用DataReceivedHandler。其次,我看到没有实现或提及锁定。串行缓冲区将成为一个噩梦,所以让我们退一步。
你真的在观察你害怕会发生的问题吗?看到我多次引用的这个很棒的回复:
如果绝对必须启动另一个线程,请考虑读取可用的串行数据并将其作为参数传递。否则,你只是为自己和项目中任何未来的维护者制造了一个巨大的混乱。
答案 1 :(得分:1)
您可以使用Threading(添加using System.Threading;
)
public static void main(string[] args)
{
SerialPort mySerialPort = new SerialPort();
mySerialPort.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
}
public static void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
Thread thread = new Thread(thisClass.Worker);
thread.Start(sender, e);
}
public static void Worker(object sender, object ev)
{
SerialDataReceivedEventArgs e = (SerialDataReceivedEventArgs) ev;
// Put your code here
}
<强>优点强>:
- 在完成工作时调用此方法时,将允许完成
<强>缺点强>:
- 程序将继续运行,即使在关闭之后,直到所有线程都完成