c# - 每行换行而不是每个字符换行?

标签 c# string loops serial-port grasshopper

变量myReceivedLines(代码如下)中从串行端口接收的数据为每个字符显示新行,而不是为每个“句子”逐行显示。

有没有办法让“句子”出现在单独的行而不是字符上?

   //Fields
    string myReceivedLines;

    //subscriber method for the port.DataReceived Event
    private void DataReceivedHandler(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
    {
        SerialPort sp = (SerialPort)sender;
        myReceivedLines = sp.ReadExisting();
    }


    protected override void SolveInstance(IGH_DataAccess DA)
    {

        List<string> gcode = new List<string>();
        DA.GetDataList(0, gcode);
        string selectedportname = default(string);
        DA.GetData(1, ref selectedportname);
        int selectedbaudrate = default(int);
        DA.GetData(2, ref selectedbaudrate);
        bool connecttodevice = default(bool);
        DA.GetData(3, ref connecttodevice);

        SerialPort port = new SerialPort(selectedportname, selectedbaudrate, Parity.None, 8, StopBits.One); //Create the serial port
        port.DtrEnable = true;   //enables the Data Terminal Ready (DTR) signal during serial communication (Handshaking)

        port.Open();             //Open the port

        if ((port.IsOpen) && (connecttodevice == true))
        {
            port.DataReceived += new SerialDataReceivedEventHandler(DataReceivedHandler);
            DA.SetDataList(0, myReceivedLines);
        }

最佳答案

假设您输入包含换行符,请使用 ReadLine为了达成这个。请注意,如果您没有设置正确的 ReadTimeout,这将是一个阻塞调用。我会将 ReceivedBytesThreshold 设置为预期的平均行长度,并将我的行存储在适合我需要的任何集合中。

//Fields
List<string> myReceivedLines;

//subscriber method for the port.DataReceived Event
private void DataReceivedHandler(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
    SerialPort sp = (SerialPort)sender;
    while(sp.BytesToRead > 0)
    {
        try 
        {
            myReceivedLines.Add(sp.ReadLine());
        }
        catch(TimeOutException) 
        {
            break;
        }
    }
}

关于c# - 每行换行而不是每个字符换行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12771271/

相关文章:

c# - 从父级引发有关用户控件的事件

c# - 在 c# 中使用多个线程从 TwinCat 遍历非二进制树状结构

java - 使用 freemarker 将字符串中的最后 2 个字符大写?

python - 如何有效地访问另一个可迭代的 Python 可迭代索引证明

C#懒惰问题

C - 如何在没有 string.h 和动态内存分配的情况下连接字符串

java - 如何将名称列表扫描到数组中?

javascript - 当用户点击不再显示警报时退出 JavaScript 中的 while 循环

python - 在不定义正确答案的情况下处理错误

c# - 单元测试在 Thread.Sleep 时间之前完成