我的SerialPort
类无法识别我的组合框信息。我在下面有一段代码,它正在读取我电脑上所有可用的COM端口:
using (var searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PnPEntity WHERE Caption like '%(COM%'"))
{
var portnames = SerialPort.GetPortNames();
var ports = searcher.Get().Cast<ManagementBaseObject>()
.ToList()
.Select(p => p["Caption"].ToString());
var portList = portnames.Select(n => n);
foreach (string s in portList)
{
cb1.Items.Add(s);
}
}
可用的COM端口正在添加到我的组合框中,不确定我是否必须在这里添加一些东西,因为当我运行代码时,我可以在我的组合栏cb1
中看到可用的COM港口。
然后,组合框上选择的值应该作为我的COM端口读取数据的参数传递:
try
{
port = new SerialPort(cb1.Text, 9600, Parity.None, 8, StopBits.One);
port.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
port.Open();
void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
noteData = sp.ReadExisting().ToString();
this.Invoke(new EventHandler(ShowData));
void ShowData(object sender, EventArgs e)
{
dtBoxNote.Text += noteData;
}
}
Log.Information("This port has been initialized.");
}
catch (Exception error)
{
Log.Fatal(error.ToString());
}
这是我的问题,当我在组合框中选择值时,数据不会通过,但是,如果我删除cb1.Text
并硬编码任何COM端口号,例如"COM11"
,我可以看到数据通过,当我运行程序时,我还收到一个警告,我的COM端口为空,这将在我选择COM端口后完成。
如何使用我的组合框信息作为SerialPort
类的参数?我尝试过使用.SelectedItem
、Index
和其他一些选项,但都不起作用。
感谢
我可以解决我的问题,在组合框中传递我的整个端口读取器块。
private void cb1_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
port = new SerialPort(cb1.Text, 9600, Parity.None, 8, StopBits.One);
port.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
port.Open();
void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
SerialPort sp = (SerialPort)sender;
someData = sp.ReadExisting().ToString();
this.Invoke(new EventHandler(ShowData));
void ShowData(object sender, EventArgs e)
{
dtBox.Text += someData;
}
}
Log.Information("Port has been initialized.");
}
catch (Exception error)
{
Log.Fatal(error.ToString());
}
}
我得到的错误我相信是因为我的串行端口设置,它是在我的组合框之前初始化的。一旦我移动我的代码";内部";组合框,我的问题消失了,因为现在,可能,它们正在一起初始化。