当前位置:  开发笔记 > 编程语言 > 正文

使用Universal Class库中的Windows UWP Windows.Devices.SerialCommunication.SerialDevice

如何解决《使用UniversalClass库中的WindowsUWPWindows.Devices.SerialCommunication.SerialDevice》经验,为你挑选了1个好方法。

我正在制作一个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:

    
         
             
                 
             
         
     
    

    在通用类库中使用(文件 - >新建项目 - > ... - > Windows - >通用 - > VS2015中的类库(通用Windows))从mscorlib.dll创建空引用异常,这与删除时相同来自Universal app的Package.appxmanifest的DeviceCapability.

我怀疑这种行为与类库没有清单文件有关,因此没有适当的权限.

我可以在类库中使用Windows.Devices.SerialCommunication吗?

是微软让我告诉用户'嘿!我为你制作了一个无用的库,你必须在你的任何应用程序中单独实现传输层.?



1> danvy..:

我在Windows 10 10586上使用Visual Studio 2015 Update 1创建了一个通用应用程序项目和一个通用类库.我设置了应用程序清单,将SerialDevice代码放在librairie中并从应用程序中调用它.

有用.

如果您的代码被调用两次,请小心,您可能会得到一个空引用异常,因为port2将为null.

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);

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有