帖子原地址https://bbs.csdn.net/topics/392191057?page=1
其中一个大神写的代码。
按照他的方法, 我设置断点,并不能进入var command = Encoding.UTF8.GetString(buffer.ToArray(), 0, pos);
也就是说,读不了串口回来的数据。请各位帮忙看看是哪里的问题??public class TestGateway
{
    public List<byte> buffer = new List<byte>();
 
    public void Received(byte[] data)
    {
        lock (buffer)
        {
            buffer.AddRange(data);
            命令处理();
        }
    }
 
    private void 命令处理()
    {
        begin:
        var pos = buffer.IndexOf(0x0a);
        if (pos < 0)
            return;
 
        if (Execute != null)
        {
            var command = Encoding.UTF8.GetString(buffer.ToArray(), 0, pos);
            ThreadPool.QueueUserWorkItem(h => Execute(command));
        }
        buffer.RemoveRange(0, pos + 1);
        goto begin;
    }
 
    public event Action<string> Execute;
}public TestGateway gateway = new TestGateway();
 
void comm_DataReceived(object sender, SerialDataReceivedEventArgs e)  
 {  
            int n = comm.BytesToRead;  
            byte[] buf = new byte[n];
            comm.Read(buf, 0, n);
            gateway.Received(buf);
}

解决方案 »

  1.   

    你是Received这个函数没进去还是comm_DataReceived这个函数就没进去
      

  2.   

    comm_DataReceived这个函数已经进去了。
    没有进去的是 var command = Encoding.UTF8.GetString(buffer.ToArray(), 0, pos);
                         ThreadPool.QueueUserWorkItem(h => Execute(command));设置 if (Execute != null)断点发现,Execute 一直为空,没有触发。也就是说,一直没有拿得到的函数
      

  3.   

    comm_DataReceived这个函数已经进去了。
    没有进去的是 var command = Encoding.UTF8.GetString(buffer.ToArray(), 0, pos);
                         ThreadPool.QueueUserWorkItem(h => Execute(command));设置 if (Execute != null)断点发现,Execute 一直为空,没有触发。也就是说,一直没有拿得到的函数
    Execute这个事件应该是将接收数据解析成UTF8字符串以后反馈给你的 所以 你需要事先去注册一下这个事件
    比如Execute+=xxxx你自己的函数