串行端口(datareceived)不起作用

时间:2011-12-29 09:37:55

标签: c# winforms serial-port

我正在使用这段代码查找串口并在组合框中显示它们的名称。

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";
}

设备连接到第一个(默认)串行端口。当我运行我的程序时,第一个端口打开(我知道它因文本框而打开),但是数据识别的事件处理程序不起作用。当我在组合框中更改串口时,没有任何反应(预期的行为),当我将我的串口改回第一个时,它会打开,并且基于数据的事件处理程序正常工作。当然,我希望第一个串口能够立即工作,而无需更改串口。我知道这个问题很长,但也许有人有类似的问题。

1 个答案:

答案 0 :(得分:1)

简化问题 - 首先运行基础知识然后添加额外功能。

删除重新打开端口的事件处理程序,并禁用不必要的设置,如ReceivedBytesThreshold,因为这些可能会产生混淆水域的副作用。

然后您可以检查您是否有工作端口 - 如果您的波特率错误,您可能永远不会收到任何数据。在继续之前确保基本工作正常。

一旦你有一个工作的硬编码串口,然后逐个添加这些功能,这样你就可以看到哪一个打破了它。

此外,如果重新打开相同的端口对象失败,您可以尝试处理您的端口并创建一个新端口。

相关问题