小编Ale*_*see的帖子

在C#中处理来自串行线的文本

我有一个运行Linux的嵌入式设备,我可以通过RS232与之通信.我正在尝试以编程方式从现有的.NET应用程序中控制它,所以我一直在搞乱这个System.IO.Ports.SerialPort类.我现在通过使用SerialPortDataRecieved事件处理程序并检查要读取的字节数来读取端口上的数据,然后传入一个byte[]大小,然后将其推byte[]送到Queue<byte[]>进一步处理中,如下所示:

public class SerialTalk{
SerialPort s;    
Queue<byte[]> RecQueue=new Queue<byte[]>;
//...bunch of irrelevant stuff here (ctors etc)
   private void DataReceivedHandler(Object sender, SerialDataReceivedEventArgs e)
   {
        byte[] recv;
        lock (s_lock)
        {
            int bytes = s.BytesToRead;
            recv = new byte[bytes];
            s.Read(recv, 0, bytes);
        }

        Console.Write(recv);
        lock (RecQueue)
        {
            RecQueue.Enqueue(recv);
        }
   }
}
Run Code Online (Sandbox Code Playgroud)

然后另一个线程从该队列中读取以执行处理,打印到终端等.这一直非常适合打印,但我希望能够正则表达我正在检索的数据.问题是,返回的字节数SerialPort是不可预测的,完全不知道它发送的是什么信息,所以我得到的数据块通常是行的片段.

我正在寻找的是一种简单,高效,多线程的方式,从线段byte[]strings,根据线条整齐地组织.我的一个想法就是让另一个线程无限循环,将byte[]队列中的队列从队列中取出,将它们转换为strings,将它们附加到a StringBuilder,然后沿着它string返回分离,取LAST字符串并使用它来构造一个新的for下一次,然后将所有其他字符串排成一个- 这样,片段就会被重新组合在一起......但这在最重要的情况下是行不通的,就在我等待的时候shell提示符,因为该字符串不会被放入第二个队列.StringBuilder.ToString()newlinesStringBuilderQueue<string>

想法?

c# regex string serial-port

6
推荐指数
1
解决办法
720
查看次数

Java:Vector <derived>可以被称为Vector <base>吗?

我有一个类foo,一个源自bar的食物的类,我在foo中有一个方法需要另一个foo

boolean baz(foo c)
{
return (condition)?true:false;
}
Run Code Online (Sandbox Code Playgroud)

我想为baz编写一个重载,它接受一个Vector并在所有这些上调用baz - 类似于

boolean baz(Vector<foo> v)
{
    for(int i=0;i<v.size();++i)
    {
    if baz(v.get(i))
        return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

我想在矢量栏上使用调用此方法.我尝试按照我刚刚概述的方式编写这个,当我尝试在bar的向量上调用此方法时,我遇到编译器错误.

我错过了什么?

java inheritance overloading

1
推荐指数
2
解决办法
613
查看次数

标签 统计

c# ×1

inheritance ×1

java ×1

overloading ×1

regex ×1

serial-port ×1

string ×1