我強烈懷疑我不應該在這裏使用靜態工廠方法,但是同時我不知道如何實現這一點。以下代碼在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