题
我正在尝试从另一个使用Unity3D引擎的程序中使用.NET SerialPort方法。
我有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));
}
然后在我的另一个程序中,我创建了类的实例。
我想知道我的回电serial_datareceived在库中(dll)是否会被调用。我正在尝试从另一个程序中读取库中的_combuffer,并且它总是空的(即使我在同一应用程序中使用控制台应用程序测试时,数据也出现)。
任何帮助是极大的赞赏。
谢谢
解决方案
<HUNCH>
如果我是班级设计师,我会将数据放入回调中,因此,如果您查看 SerialDataReceivedEventArgs
上课,您会看到内部是您带有数据的缓冲区。
因此,在获得事件后,然后致电阅读,实际上您会丢弃发送给您的数据并要求更多。
换句话说,是的,它是一个外部库这一事实与它无法正常工作的事实无关。
</HUNCH>
其他提示
通常,只要正确设置访问修饰符,方法在单独的DLL中通常没有什么特别的。
但是,根据您如何设置解决方案,可能会痛苦,以确保您的bin文件夹中有最新的DLL。
不隶属于 StackOverflow