0

我正在尝试在 Windows Phone 8 上的 Windows::Devices::Sensors 命名空间中使用 C++ Accelerometer 接口。代码与我拥有的 C# 项目非常相似,但我无法获得 C++ 事件我可以用我的 C# 代码开火。

我的 C++ 代码是一个带有 C++ 组件的 C# 项目,C++ 组件只是打开 Accelerometer 设备进行读取,然后尝试设置一个事件以在数据准备好时触发:

AccelerometerWrapper::AccelerometerWrapper() {
    Accelerometer^ acc = Accelerometer::GetDefault();
    accReading = acc->ReadingChanged::add( ref new TypedEventHandler<Accelerometer^, AccelerometerReadingChangedEventArgs^>(this, &AccelerometerWrapper::ReadingChanged));
}

void AccelerometerWrapper::ReadingChanged(Accelerometer^ sender, AccelerometerReadingChangedEventArgs^ e) {
    ...
}

不幸的是,我的ReadingChanged()函数从未被调用过。我四处寻找一种Start()方法或类似的方法,但我找不到任何东西。我的大部分知识都来自AccelerometerCPP 示例,但我无法实际测试它,因为它是一个通用的 WinRT(例如 Windows 8,而不是 Windows Phone 8)示例,而且我的计算机没有加速度计。一切都编译并运行,事件永远不会被触发。

编辑:我已经成功运行了一个测试来验证我可以手动调用acc->GetCurrentReading(),所以加速度计正在工作,它似乎是没有被触发的事件。

先感谢您!

4

1 回答 1

1

我不是 C++ 专家,但新的加速度计传感器使用 C# 在我的机器上工作。

private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    var accelerometer = Accelerometer.GetDefault();
    if (accelerometer != null)
    {
        accelerometer.ReadingChanged += accelerometer_ReadingChanged;
    }
}

void accelerometer_ReadingChanged(Accelerometer sender, AccelerometerReadingChangedEventArgs args)
{
    Debug.WriteLine(args.Reading.AccelerationX + ", " + args.Reading.AccelerationY + "," + args.Reading.AccelerationZ);
}

当我们运行该代码片段时,我们可以看到以下预期输出:
输出

只是对 C++ 的猜测,您是否需要将 Accelerometer 实例缓存在某处而不是让它超出范围?

于 2013-01-24T02:00:14.643 回答