1
我有多個串口設備連接到我的電腦和我工作的一個程序,允許用戶選擇儘可能多的,因爲他們想要的端口,然後程序會動態創建TabPage
,並增加了他們到TabControl
。跨線程出現InvalidOperationException試圖訪問的SerialPort動態
每個標籤頁也將有一個多TextBox
,將顯示來自指定的SerialPort輸入數據到它。
這裏是我的代碼,試圖動態創建這些控件:
private void AddSerialPort(string portName)
{
ActiveSerialPorts.Add(portName);
if (!tabControlActiveSerialPorts.Enabled)
tabControlActiveSerialPorts.Enabled = true;
var page = new TabPage(portName);
page.Text = portName;
var tb = new TextBox();
tb.Name = portName;
tb.Dock = DockStyle.Fill;
tb.BackColor = Color.Black;
tb.Multiline = true;
page.Controls.Add(tb);
tabControlActiveSerialPorts.TabPages.Add(page);
var sp = new SerialPort(portName, 115200, Parity.None, 8, StopBits.One);
sp.Open();
tb.Tag = sp;
sp.DataReceived += delegate
{
tb.Text += sp.ReadExisting(); //LINE 87
};
}
問題: 這是我得到的運行時錯誤,並在線突破土地87(以上評論代碼):
Cross-thread operation not valid: Control 'COM16' accessed from a thread other than the thread it was created on.
這裏有什麼可能的缺陷?
你只是真棒! –
謝謝,高興幫忙:) – keyboardP