C# 来自串行端口的读取线锁定

C# 来自串行端口的读取线锁定,c#,serial-port,C#,Serial Port,我正在尝试从一个scale RS232接口读取数据。它通过串行端口发送一个连续的ASCII字符串流,我很难得到它。我只想得到它发出的一行数据。我想我假设我会使用Readline来获取数据,但它只是在我运行电脑时锁定了它。我认为它正在尝试获取所有数据,并且在数据停止之前不会停止?以下是我正在使用的代码: private void button1_Click(object sender, EventArgs e) { serialPort1.PortName = "COM4"

我正在尝试从一个scale RS232接口读取数据。它通过串行端口发送一个连续的ASCII字符串流,我很难得到它。我只想得到它发出的一行数据。我想我假设我会使用Readline来获取数据,但它只是在我运行电脑时锁定了它。我认为它正在尝试获取所有数据,并且在数据停止之前不会停止?以下是我正在使用的代码:

private void button1_Click(object sender, EventArgs e)
    {
        serialPort1.PortName = "COM4";
        serialPort1.BaudRate = 9600;
        serialPort1.DataBits = 8;
        serialPort1.Parity = Parity.None;
        serialPort1.StopBits = StopBits.One;

        //opening the serial port
        serialPort1.Open();

        string str = serialPort1.ReadLine();

        MessageBox.Show(str);

        serialPort1.Close();

    }
您能帮我确定如何只获取一行输出数据并关闭连接吗?

定义为阻止“直到新行值的第一次出现”,其中默认为换行。您正在流中发送换行符吗?请注意,换行符(ASCII 0x0A)与您可能要发送的回车符(ASCII 0x0D)不同

如果需要,您可以重新定义换行符,或者如果一行结尾感觉不正确,您可以使用。您还可以设置一个

您可能更喜欢使用其中一个重载从端口读取给定数量的字节,而不是一行


如果这些都不适用,请确保您确实在您认为的位置发送数据-调出HyperTerminal/TeraTerm/您最喜欢的串行终端,使用上面使用的相同串行端口设置对其进行配置,并确保您看到了希望看到的数据。

理想的解决方案是生成一个工作线程来实际从串行端口读取数据(因此,该线程可以整天被阻塞,而不会妨碍主应用程序线程)。一旦接收到数据,它就可以广播一个事件,指出已接收到数据以及该数据是什么。线程将通过事件与主应用程序线程通信。

当你说“锁定电脑”时,它是真的锁定了整个电脑,还是只锁定了你的程序?对不起,我的意思是它锁定了程序。@user:这个线程看起来回答了我。你还需要什么?