[英]Monitoring multiple com ports using C#
背景:我們正在開發一個應用程序(或Windows服務),該應用程序將偵聽來自通過虛擬串行端口連接的各種設備的通信。 每個設備的信息將被手動捕獲,因此我知道設備1將位於COM5上,設備2將位於COM6上,依此類推。每當設備傳輸數據時,我都需要捕獲數據並將其寫入其他地方(基本上是日志文件)。
考慮到這一點,是否可以在單個線程上監視多個串行端口,還是應該為每個端口生成一個新線程(請記住我確切知道要監視的端口)?
還是你們認為什么是好方法?
我的工作原型代碼如下所示(雖然只讀取一個端口):
class Program
{
public static void Main()
{
SerialPort mySerialPort = new SerialPort("COM5");
mySerialPort.BaudRate = 9600;
mySerialPort.Parity = Parity.None;
mySerialPort.StopBits = StopBits.One;
mySerialPort.DataBits = 8;
mySerialPort.Handshake = Handshake.None;
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(indata);
Debug.Print("Data Received:");
Debug.Print(indata);
}
}
我基本上想知道是否應該為每個包含控制台應用程序中代碼的端口創建一個類,還是應該老套寫一個可以同時監視所有程序的大型程序應用程序。
如果COM端口設備都是相似的,那么用一種類來處理每個設備的實例來檢索其數據似乎是一種方法。 如果需要單獨的功能,則始終可以從基類繼承。 如果您放棄“編寫大型程序應用程序”的狂熱,將來將很難維護和修改。
對於多線程,您使用的事件處理程序應允許讀取多個端口,而不會影響程序中的其他操作。 可以將它們視為自己的線程,它們之間的操作需要作為跨線程操作(例如更改表單屬性)來處理。
無論如何,DataReceived事件往往發生在SerialPort創建的后台線程上。
這意味着: 您不需要自己創建多個線程來監視多個端口b。 您需要小心在事件處理程序中執行的操作,因為您可能不在應用程序的主線程上,例如,如果直接與窗口進行交互,則可能會出現問題。 但是,您的控制台資料會很好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.