ReadingChanged никогда не призывал к акселерометру на WP8

Я пытаюсь использовать интерфейс C++ Accelerometer в пространстве имен Windows::Devices::Sensors на Windows Phone 8. Код очень похож на мой проект C#, который работает, но я не могу получить событие C++ для огонь, как я могу с моим кодом C#.

Мой код C++ представляет собой проект C# с компонентом C++, компонент C++ просто открывает акселерометр для чтения, а затем пытается настроить событие для запуска всякий раз, когда данные готовы:

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(), поэтому акселерометр работает, просто кажется, что это событие не запускается.

Заранее спасибо!


person staticfloat    schedule 21.01.2013    source источник


Ответы (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);
}

Когда мы запустим этот фрагмент кода, мы увидим следующий ожидаемый результат:
Output

Просто предположение для С++, вам нужно где-то кэшировать экземпляр акселерометра, вместо того, чтобы позволить ему выйти за рамки?

person JustinAngel    schedule 24.01.2013