0

我正在尝试从另一个使用 Unity3D 引擎的程序中使用 .Net 串行端口方法。

我有 ac# 类库 (dll),它在串口接收到一些数据时注册并实现回调函数。

public CSerialDll()
{         
   _serial.DataReceived += new SerialDataReceivedEventHandler(serial_DataReceived);
}

void serial_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
   int bytes = _serial.BytesToRead;
   _comBuffer = new byte[bytes];
   _serial.Read(_comBuffer, 0, bytes);
   Console.WriteLine("data recv: " + System.Text.ASCIIEncoding.ASCII.GetString(_comBuffer));
}

然后在我的另一个程序中,我创建了一个类的实例。

我想知道我在库(dll)中的回调 serial_DataReceived 是否会被调用。我正在尝试从另一个程序中读取库中的 _comBuffer 并且它始终为空(即使当我在同一个应用程序中使用控制台应用程序进行测试时数据正在到来)。

任何帮助是极大的赞赏。

谢谢

4

2 回答 2

1

<HUNCH>

如果我是一个类设计者,我会将数据放入回调中,所以如果你看一下这个SerialDataReceivedEventArgs类,你会发现它里面是你缓冲数据的地方。

所以,在你得到一个事件之后,然后你调用 read,你实际上丢弃了发送给你的数据并请求更多。

换句话说,是的,它是一个外部库的事实与它不能正常工作的事实没有任何关系。

</HUNCH>

于 2010-12-06T06:49:10.020 回答
0

只要正确设置了访问修饰符,在单独的 DLL 中的方法通常没有什么特别之处。

但是,根据您设置解决方案的方式,确保您的 bin 文件夹中有最新的 DLL 可能会很痛苦。

于 2010-12-06T06:51:48.440 回答