我一直在尝试创建一个C# Windows Forms蓝牙串行应用程序,然后在我的Raspberry Pi 3上通过Mono运行它。我尝试了以下方法:
String SelectedDevice = AvailableDevicesComboBox.SelectedItem.ToString();
BSerialPort = new SerialPort(SelectedDevice, 115200, Parity.None, 8, StopBits.One);
BSerialPort.Open();
使用 standart System.IO.Ports 库。
但是我无法打开端口,因为我得到了一个可爱的异常"对象引用未设置为对象的实例",这意味着根本没有这样的端口。我已经使用其中一个 RFCOMM 插槽将蓝牙设备与 RPi 配对,然后将其用作串行(并通过终端中的"cat"成功传输了一些字符串),但我应用程序中的结果是相同的,它实际上没有显示在 ComboBox 中。所以我决定将"32Feet-InTheHand"库一起用于Bluez和Mono。现在,当我在 Mono 中运行我的 .exe 文件时,我在终端中得到这个:
Unhandled Exception: System.TypeLoadException:
Could not load type of field 'NameOfApp.Form1:BClient' (1) due to:
Could not load file or assembly 'InTheHand.Net.Personal,
Version=3.5.605.0, Culture=neutral, PublicKeyToken=ea38caa273134499'
or one of its dependencies. assembly:InTheHand.Net.Personal, Version=3.5.605.0,
Culture=neutral, PublicKeyToken=ea38caa273134499 type:<unknown type> member:<none>
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeLoadException:
Could not load type of field 'NameOfApp.Form1:BClient' (1) due to: Could not load file
or assembly 'InTheHand.Net.Personal, Version=3.5.605.0, Culture=neutral,
PublicKeyToken=ea38caa273134499' or one of its dependencies. assembly:InTheHand.Net.Personal,
Version=3.5.605.0, Culture=neutral, PublicKeyToken=ea38caa273134499
type:<unknown type> member:<none>
我已添加引用,并在"应用程序文件"选项卡中根据需要对其进行标记。但我一点也不擅长这个...
Linux版本: Raspbian 9 - Linux Raspberrypi 4.9.59-v7+ #1047
Visual Studio Community 2017 版本 15.5.3
单声道:单声道 JIT 编译器版本 5.4.1.6
32Feet.NET:3.5.605
好的,所以我设法解决了这个问题。事实证明,这是我的一个非常非常愚蠢的错误。我没有正确声明"BSerialPort"。以下陈述是错误的:
BSerialPort = new SerialPort(SelectedDevice, 115200, Parity.None, 8, StopBits.One);
声明此类端口的正确方法如下:
SerialPort BSerialPort = new SerialPort(SelectedDevice, 115200, Parity.None, 8, StopBits.One);
声明开头的这个小"SerialPort"定义有很大的不同。
感谢您的帮助,祝您编码愉快! :)