线程化C#串口包装器

时间:2015-09-24 14:21:53

标签: c# multithreading unity3d mono serial-port

我从Unity3D 4.5(C#,MonoDevelop)的串口读取数据。我已经using this wrapper来补偿SerialPort类的Mono实现中的各种缺陷(特别是它在尝试读取端口时崩溃的倾向)。这已经完美地运行了,但现在我需要同时与八个不同的串口通信,并且线程已成为必须。

我无法准确说出错误的来源,但每当我尝试从单独的Thread或BackgroundWorker连接到串口时,都无法打开端口 - Open()返回false 。奇怪的是,端口似乎打开并将保持打开状态......如果我尝试再次从已知工作程序打开端口,它将报告该端口已经打开。但是,在我的程序内部,端口肯定是不开放的。 Open()返回false,如果我尝试写入端口,我会打开"端口未打开"异常。

如果我使用主线程中的Open()并正确处理它,它会按预期完全打开和关闭。这个包装器可以在一个单独的线程中使用,还是我需要以不同的方式处理它?<​​/ p>

编辑:我挖了一下,发现在ConfigureSerialPort()中,行:

if (GetCommState(handle, ref serialConfig))

正在评估false,因此该方法返回false并且无法配置串行端口。同样,这只发生在我尝试从单独的线程或后台工作者打开()时。

0 个答案:

没有答案