Windows8桌面应用程序中C#中的传感器

时间:2013-05-22 09:29:55

标签: c# windows-8 sensor

我正在尝试在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);

谢谢!

1 个答案:

答案 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)的一部分,我想知道它是否能够正确读取该值?