我正在尝试在windows8桌面应用程序的c#中编写一个简单的应用程序,它将显示加速度计的变化。 我正在使用windows7.SensorsAndLocation dll并编写以下代码。
private static Accelerometer3D _accelerometer3D;
private static Accelerometer3DReport _accelerometer3DReport;
static void Main(string[] args)
{
Sensor[] accelerometers = SensorManager.GetSensorsByType(SensorTypes.Accelerometer3d);
if (accelerometers.Length > 0)
{
_accelerometer3D = (Accelerometer3D)accelerometers[0];
_accelerometer3D.DataUpdated += _accelerometer3D_DataUpdated;
}
Console.ReadLine();
}
static void _accelerometer3D_DataUpdated(Sensor sensor, SensorDataReport dataReport)
{
_accelerometer3DReport = dataReport as Accelerometer3DReport;
float f = _accelerometer3DReport.AxisX_G;
}
当我运行此代码并且数据已更新时,它会运行到_accelerometer3D_DataUpdated函数中,但随后它会在此行中生效:
float f = _accelerometer3DReport.AxisX_G;
with system.invalidcastexception:指定的强制转换无效。 我没有看到任何其他细节。
当我使用ambientLightSensors运行相同的代码时,它可以正常工作。
有什么建议吗?
请帮助!!! 注意:我使用桌面应用程序,所以我不能使用Windows8传感器API。 当然,我的设备上有加速度计(Microsoft surface pro x64);
谢谢!
答案 0 :(得分:0)
您使用的库的来源似乎是Sensor and Location Sample Interop library。在那里的代码中,您将注意到:
public float AxisX_G
{
get { return (float)this.GetDataField(PropertyKey.Create(new Guid(0X3F8A69A2, 0X7C5, 0X4E48, 0XA9, 0X65, 0XCD, 0X79, 0X7A, 0XAB, 0X56, 0XD5), 2)); }
}
所以我怀疑浮动转换会导致异常,暗示GetDataField
没有返回预期的内容。您可以拉入该代码并设置断点以查看返回的内容
有一个Sensor Diagnostic Tool是Windows驱动程序工具包(WDK)的一部分,我想知道它是否能够正确读取该值?