你的位置:首页 > ASP.net教程

[ASP.net教程]在WPF中使用传感器只需三步


在WPF 中使用传感器已知有两种方式可以实现:

1:C++通过实现COM接口的方式拿到数据,再传到WPF中使用
2:直接使用WinRT的API(什么是WinRT? https://social.msdn.microsoft.com/forums/zh-CN/89b0e6cd-959e-48d2-ac6c-847757026eb6/winrtwpf)
 
显然使用第二种方式简单很多,本文介绍第二种方式,如果对第一种方式感兴趣,请参考https://msdn.microsoft.com/en-us/library/windows/desktop/dd318944(v=vs.85).aspx
 
 
整个过程分三步:
第一步:要能够使用WinRT库,首先要下载Win8或者Win8.1的SDK(VS打开带有WinRT的程序会自动提示安装,也可以自己手动下载安装https://msdn.microsoft.com/zh-cn/windows/desktop/bg162891,手动下载安装未验证)
第二步:下载完SDK后发现依然无法找到传感器类库的dll,此时需要将程序的目标平台改为8.1或8,具体方法是
      
     打开项目的project文件,在<PorpertyGroup>节点下添加 <TargetPlatformVersion>8.1</TargetPlatformVersion>
     此时在添加引用就会发现有个叫Windows的dll可以添加,传感器的API就在这个dll里面啦。
 
第三步:接下来开始使用API获取传感器数据,编译却报错,此时还需要一些运行时的库支持,添加引用System.Runtime 和 System.Runtime.InteropService.WindowsRuntime.dll. 它在系统的C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5目录下,此时就可以编译通过了。
 
正在开心着,却发现代码中一片飘红,就像这样

 
其原因是
 

 
 
这两个程序集中存在相同的命名空间以及相同的类,要解决此问题可以使用程序集别名的方式
在引用的System.Runtime的属性里面有个别名
 
   
此属性可以给引用的程序集指定别名,改成“RunTime”
此时若使用System.Runtime中的类则在当前文件的所有using之前加上  extern alias RunTime; 
在代码中就可以这么使用了:
RunTime::NameSpace1.Test test= new RunTime::NameSpace1.Test();
这样飘红问题就解决了。
接下来就可以只是获取你需要的传感器对象,订阅相关事件了,如下:
SimpleOrientationSensor _simpleOrientationSensor = SimpleOrientationSensor.GetDefault();
_simpleOrientationSensor.OrientationChanged += SimpleOrientationSensorOnOrientationChanged;
那么具体有哪些传感器?怎么使用?
戳:https://msdn.microsoft.com/zh-cn/library/windows/apps/windows.devices.sensors.aspx