1

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

谢谢!

4

1 回答 1

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没有返回预期的内容。您可能会拉入该代码并设置断点以查看返回的内容

有一个传感器诊断工具,它是 Windows 驱动程序工具包 (WDK) 的一部分,我想知道它是否能够正确读取该值?

于 2013-05-22T22:05:32.273 回答