【发布时间】:2011-12-29 09:37:54
【问题描述】:
我正在使用这段代码来查找串行端口并在组合框中显示它们的名称。
string[] ports = SerialPort.GetPortNames();
foreach (string p in ports)
{
comboBox1.Items.Add(p);
}
comboBox1.SelectedIndex = 0;
所以,当我启动我的程序时,默认端口应该是ports中的第一个
我正在使用这个函数来初始化串口
private void portInit()
{
port.PortName = comboBox1.Text;
port.BaudRate = 57600;
port.Parity = Parity.None;
port.ReceivedBytesThreshold = 8;
port.DataBits = 8;
port.Handshake = Handshake.None;
port.StopBits = StopBits.One;
port.DataReceived += new SerialDataReceivedEventHandler(datarecievedhandler);
port.Open();
}
如果用户决定更改串行端口,我有这个事件处理程序
private void comboBox1_SelectionChangeCommitted(object sender, EventArgs e)
{
port.Close();
port.PortName = comboBox1.Text;
port.Open();
}
我在这部分代码中初始化了我的串口
public Form1()
{
InitializeComponent();
InitializeGraphs();
portInit();
if (port.IsOpen)
textBox1.Text += "-Port " + port.PortName + " is opened\r\n";
}
设备连接到第一个(默认)串行端口。当我运行我的程序时,第一个端口打开(我知道它是因为文本框而打开的),但是 datarecieved 事件处理程序不起作用。当我在组合框中更改串口时,没有任何反应(预期行为),当我将串口更改回第一个时,它打开,并且 datarecieved 事件处理程序工作正常。当然,我希望第一个串口可以立即工作,而不需要更改串口。我知道这个问题是一个很长的问题,但也许有人遇到过类似的问题。
【问题讨论】:
-
当您将 Handshake 设置为 None 时,由您决定是否打开握手信号。将 RtsEnable 和 DtrEnable 设置为 true。
标签: c# winforms serial-port