帖子原地址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);
}
其中一个大神写的代码。
按照他的方法, 我设置断点,并不能进入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);
}
没有进去的是 var command = Encoding.UTF8.GetString(buffer.ToArray(), 0, pos);
ThreadPool.QueueUserWorkItem(h => Execute(command));设置 if (Execute != null)断点发现,Execute 一直为空,没有触发。也就是说,一直没有拿得到的函数
没有进去的是 var command = Encoding.UTF8.GetString(buffer.ToArray(), 0, pos);
ThreadPool.QueueUserWorkItem(h => Execute(command));设置 if (Execute != null)断点发现,Execute 一直为空,没有触发。也就是说,一直没有拿得到的函数
Execute这个事件应该是将接收数据解析成UTF8字符串以后反馈给你的 所以 你需要事先去注册一下这个事件
比如Execute+=xxxx你自己的函数