我有一個C#程序可以同時從兩個串口讀取。串口設備是一個Prolific USD到4串口適配器,我將兩個硬件插在適配器的不同端口上。問題是,當我從每個端口讀取一個端口時,一切正常,但是當我嘗試從兩個端口同時讀取時,其中一個端口沒有響應。爲了解決這個問題,我啓動了應用程序的兩個實例,並能夠一次從兩個端口讀取(應用程序的每個實例都有一個)。有誰知道如何在一個應用程序中同時讀取兩個獨立的串行端口?謝謝。同時從兩個串口讀取
添加一些代碼:
端口1:
//按鈕來啓動或停止端口1閱讀因爲硬件要求我讀響應之前寫,寫的是在計時器完成
private void buttonPort1_Click(object sender, EventArgs e)
{
if (buttonPort1.Text == "Start Recording")
{
if (!port1.IsOpen)
{
port1.Open();
}
timerPort1.Start();
buttonPort1.Text = "Stop Recording";
}
else
{
timerPort1.Stop();
buttonPort1.Text = "Start Recording";
}
}
//寫「d」硬件每次收到迴響應
private void timerPort1_Tick(object sender, EventArgs e)
{
port1.Write("D");
}
void port1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
try
{
string result = port1.ReadLine();
oneParamDelegate dg = PHandCondResult; // send back the result to the main thread
this.Invoke(dg, result);
}
catch
{
}
}
端口2
用於第二端口的代碼是與上述類似真,區別在於不同的端口,DataReceived事件檢索和定時器。
我會嘗試Grant Thomas建議的多線程選項:我以前沒有嘗試過,因爲我認爲串行端口已經在單獨的線程上工作:datareceived事件不會阻塞主線程, t在主線程上創建的訪問控制,但我仍然會使用後臺工作人員並稍後恢復。謝謝大家的快速回復。
你可以添加一些代碼嗎? – 2013-04-22 12:43:53
您是使用多個線程還是隻使用一個線程? – 2013-04-22 12:43:54
你用這種方式實現了dataReceived事件: http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.datareceived.aspx ? 對我來說,目前還不清楚spPH是什麼。 – 2013-04-22 13:22:30