C# Dynamicly创建的SerialPort停止响应,没有错误
我有多个串行设备连接到我的电脑,我正在开发一个程序,允许用户选择任意数量的端口,然后程序将动态创建TabPage并将它们添加到TabControl 每个选项卡页还将有一个多行文本框,显示从分配给它的serialport传入的数据 以下是我尝试动态创建这些控件的代码:C# Dynamicly创建的SerialPort停止响应,没有错误,c#,multithreading,winforms,serial-port,dynamic-controls,C#,Multithreading,Winforms,Serial Port,Dynamic Controls,我有多个串行设备连接到我的电脑,我正在开发一个程序,允许用户选择任意数量的端口,然后程序将动态创建TabPage并将它们添加到TabControl 每个选项卡页还将有一个多行文本框,显示从分配给它的serialport传入的数据 以下是我尝试动态创建这些控件的代码: private void AddSerialPort(string portName) { var page = new TabPage(portName); page.Text = portName;
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
,它就可以正常工作,文本框就会被填满。但是,只要我添加另一个串行端口
,几秒钟后,第一个或第二个添加的串行端口将停止工作,而另一个仍然工作(这完全是随机的,第一个或第二个串行端口停止在文本框中填充数据,不,这不是我的硬件!)我指的是文本框,指定的内容将不再填充
我没有从调试器收到任何错误…这根本不起作用!知道有什么问题吗
我必须提到,如果我只添加1个串行端口,它的工作正常
我尝试了
BeginInvoke
而不是Invoke
,但它没有改变任何东西。可能是SerialPort
对象被处理掉了。尝试将每个新对象添加到列表中:
class Class
{
List<SerialPort> ports = new List<SerialPort>();
private void AddSerialPort(string portName)
{
...
var sp = new SerialPort(portName, 115200, Parity.None, 8, StopBits.One);
ports.Add(sp);
...
}
}
类
{
列表端口=新列表();
私有void AddSerialPort(字符串portName)
{
...
var sp=新的串行端口(端口名,115200,奇偶校验。无,8,停止位。1);
添加端口(sp);
...
}
}
这似乎解决了问题!!!其实我也想这么做:D无论如何,谢谢!