我正在制作一个 Modbus 库(再次......)。这次它打算在 Windows 10 IoT Core 上运行。
我遇到了一个有趣的问题。
这段代码:
string aqs = SerialDevice.GetDeviceSelector();
var dis = await DeviceInformation.FindAllAsync(aqs);
var port = await SerialDevice.FromIdAsync(dis[0].Id);
if (port != null) {
port.BaudRate = 9600;
port.DataBits = 8;
port.StopBits = SerialStopBitCount.One;
port.Parity = SerialParity.None;
port.Handshake = SerialHandshake.None;
port.ReadTimeout = TimeSpan.FromMilliseconds(1000);
port.WriteTimeout = TimeSpan.FromMilliseconds(1000);
}
-
在通用应用程序中使用效果非常好。当然,如果您将以下代码添加到 Package.appxmanifest 中:
<Capabilities>
<DeviceCapability Name="serialcommunication">
<Device Id="any">
<Function Type="name:serialPort" />
</Device>
</DeviceCapability>
</Capabilities>
从通用类库中使用(VS2015 中的文件 -> 新项目 -> ... -> Windows -> 通用 -> 类库(通用 Windows))会从 mscorlib.dll 中创建空引用异常,这与删除相同通用应用程序的 Package.appxmanifest 中的 DeviceCapability。
我怀疑这种行为与类库没有清单文件,因此没有适当的权限有关。
我可以在类库中使用 Windows.Devices.SerialCommunication 吗?
微软是不是让我告诉用户‘嘿!我为你制作了一个无用的库,你必须自己在任何应用程序中单独实现传输层。 ?
我在 Windows 10 10586 上使用 Visual Studio 2015 Update 1 创建了一个通用应用程序项目和一个通用类库。我设置了应用程序清单,将 SerialDevice 代码放入库中并从应用程序中调用它。
有用。
请注意,如果您的代码被调用两次,您可能会收到空引用异常,因为 port2 将为空。
var aqs = SerialDevice.GetDeviceSelector();
var dis = await DeviceInformation.FindAllAsync(aqs);
var port = await SerialDevice.FromIdAsync(dis[0].Id);
Debug.WriteLIne(port?.PortName);
var aqs2 = SerialDevice.GetDeviceSelector();
var dis2 = await DeviceInformation.FindAllAsync(aqs);
var port2 = await SerialDevice.FromIdAsync(dis[0].Id);
//port2 will be null
Debug.WriteLine(port2?.PortName);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)