gesturerecogizer在WP Direct3D应用程序中抛出异常

GestureRecognizer throws exception in WP Direct3D App

本文关键字:抛出异常 应用程序 Direct3D WP gesturerecogizer      更新时间:2023-10-16

我现在正在开发WP10的图形应用程序。我需要使用GestureRecognizer来移动和调整屏幕上的对象大小。看起来很酷,但在某些情况下,使用两个手指的手势,GestureRecognizer会抛出这个错误。

WinRT information:帧内报文不一致。指针id不是唯一的,或者在时间戳、帧id、指针类型或源设备上存在差异。

用一个手指做手势就可以了。奇怪的是,这个逻辑在WP8.1上工作得很好。

这是我的识别器的源代码:
GestureHelper::GestureHelper(){
    this->recognizer = ref new GestureRecognizer();
    this->recognizer->GestureSettings = GestureSettings::ManipulationScale | GestureSettings::ManipulationTranslateX |
    GestureSettings::ManipulationTranslateY | GestureSettings::Tap | GestureSettings::ManipulationRotate | GestureSettings::DoubleTap;
    this->recognizer->Tapped += ref new TypedEventHandler<GestureRecognizer ^, TappedEventArgs ^>(this, &GestureHelper::OnTapped);
    this->recognizer->ManipulationStarted += ref new TypedEventHandler<GestureRecognizer ^, ManipulationStartedEventArgs ^>(this, &GestureHelper::OnManipulationStarted);
    this->recognizer->ManipulationCompleted += ref new TypedEventHandler<GestureRecognizer ^, ManipulationCompletedEventArgs ^>(this, &GestureHelper::OnManipulationCompleted);
    this->recognizer->ManipulationUpdated += ref new TypedEventHandler<GestureRecognizer ^, ManipulationUpdatedEventArgs ^>(this, &GestureHelper::OnManipulationUpdated);
}
void GestureHelper::ProcessPress(PointerPoint ^ppt){
    this->recognizer->ProcessDownEvent(ppt);
    if (this->Clicked) {
        this->Clicked(ppt->Position.X, ppt->Position.Y);
    }
}
void GestureHelper::ProcessMove(PointerPoint ^ppt){
    this->recognizer->ProcessMoveEvents(ppt->GetIntermediatePoints(ppt->PointerId));
}
void GestureHelper::ProcessRelease(PointerPoint ^ppt){
    this->recognizer->ProcessUpEvent(ppt);
}

void GestureHelper::OnManipulationStarted(GestureRecognizer^ sender, ManipulationStartedEventArgs^ e){
    if (this->Pressed){
        this->Pressed(e->Position.X, e->Position.Y);
    }
}
void GestureHelper::OnManipulationCompleted(GestureRecognizer ^sender, ManipulationCompletedEventArgs ^e) {
    if (this->Released) {
        this->Released(e->Position.X, e->Position.Y);
    }
}
void GestureHelper::OnManipulationUpdated(GestureRecognizer ^sender, ManipulationUpdatedEventArgs ^e){
    if (this->MoveUpdated){
        this->MoveUpdated(e->Position.X, e->Position.Y);
    }
    if (this->ZoomUpdated){
        this->ZoomUpdated(e->Delta.Scale);
    }
    if (this->RotateUpdated) {
        this->RotateUpdated(-e->Delta.Rotation);
    }
}
void GestureHelper::OnTapped(GestureRecognizer ^sender, TappedEventArgs ^e){
    if (this->Pressed) {
        this->Pressed(e->Position.X, e->Position.Y);
    }
    if (this->Released){
        this->Released(e->Position.X, e->Position.Y);
    }
}

谢谢你的帮助!

乌利希期刊指南:Try-catch是有帮助的,但仍然想了解为什么这个异常抛出

好的,我在微软论坛上得到了答案。这是微软的错误,将在下次更新中修复。所以现在我用try catch来解决这个问题。

回答:https://social.msdn.microsoft.com/Forums/ru-RU/2353edb7-8c1c-4a8d-9e57-ece72f863616/uwpgesturerecognizer-throws-exception-in-wp-direct3d-app?forum=wpdevelop