我强烈怀疑我不应该在这里使用静态工厂方法,但是同时我不知道如何实现这一点。以下代码在CreateOpenPort
的行中给出编译错误,该行分配_currentPort_DataReceived
,因为该委托方法不是静态的。我该如何解决这个问题,最好使用非静态工厂方法?在静态工厂方法中分配事件处理委托
public static SerialPortService CreateOpenPort(string portName, int baudRate, Parity parity, int dataBits, StopBits stopBits)
{
var service = new SerialPortService
{
_currentPort = new SerialPort(portName, baudRate, parity, dataBits, stopBits)
};
service._currentPort.DataReceived += CurrentPortCharsReceived;
service._currentPort.Open();
return service;
}
void CurrentPortCharsReceived(object sender, SerialDataReceivedEventArgs e)
{
var port = (SerialPort) sender;
var chars = new char[port.BytesToRead];
var x = port.Read(chars, 0, chars.Length);
OnDataReceived(chars.ToString());
}
静态处理程序如何处理来自多个SerialPort实例的并发事件?它排队他们吗? – ProfK 2010-12-02 10:41:28
他们将在自己的静态方法副本中运行。但是,如果您正在触摸任何静态状态,则需要确保已同步。 – Aliostad 2010-12-02 10:51:06