0
我有多個串行設備連接到我的電腦,我正在一個程序,允許用戶選擇儘可能多的端口,他們然後程序將動態創建TabPage並將它們添加到TabControl 。Dynamicaly創建SerialPort停止響應沒有錯誤
每個標籤頁也有一個多行文本框,用於顯示從分配的串口到它的輸入數據。
這裏是我的代碼,試圖動態創建這些控件:
private void AddSerialPort(string portName)
{
var page = new TabPage(portName);
page.Text = portName;
var tb = new TextBox();
tb.Name = portName;
tb.Dock = DockStyle.Fill;
tb.BackColor = Color.Black;
tb.ForeColor = Color.White;
tb.Multiline = true;
page.Controls.Add(tb);
tabControlActiveSerialPorts.TabPages.Add(page);
//Define serial port
var sp = new SerialPort(portName, 115200, Parity.None, 8, StopBits.One);
sp.DataReceived += delegate
{
if (tb.InvokeRequired)
{
tb.Invoke(new Action(() =>
{
var incoming = sp.ReadExisting();
tb.Text += incoming;
}));
}
else
{
var incoming = sp.ReadExisting();
tb.Text += incoming;
}
};
sp.Open();
}
的問題是,如果我只添加一個SerialPort
,它工作正常和文本得到填補。但是,只要我添加另一個SerialPort
,幾秒鐘後,第一個或第二個添加的SerialPort將停止工作,而另一個仍然工作(這是完全隨機的第一個或第二個停止填充文本框中的數據,否則它不是我的硬件!)我的意思是指定它的文本框不會被填滿了。
我沒有收到來自調試器的任何錯誤...這只是行不通的!任何想法可能是什麼問題?
我不得不提,如果我只添加1串口,它的工作正常!
我試過BeginInvoke
而不是Invoke
但它沒有改變任何東西。
這似乎是照顧問題!我想要做同樣的事情:D謝謝! –