Kinect NullReferenceException error

本文关键字:error NullReferenceException Kinect | 更新日期: 2023-09-27 18:16:22

void runtime_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)
{
    SkeletonFrame skeletonSet = e.SkeletonFrame;
    SkeletonData data = (from s in skeletonSet.Skeletons
                         where s.TrackingState == SkeletonTrackingState.Tracked
                         select s).FirstOrDefault();
    var head = data.Joints[JointID.Head];
    var rightHand = data.Joints[JointID.HandRight];
    var leftHand = data.Joints[JointID.HandLeft];
    SetEllipsePosition(ellipseHead, head, false);
    SetEllipsePosition(ellipseLeftHand, leftHand, isBackGestureActive);
    SetEllipsePosition(ellipseRightHand, rightHand, isForwardGestureActive);
    ProcessForwardBackGesture(head, rightHand, leftHand);
}

var head = data.Joints[JointsID.Head];给了我一个类型为NullReferenceException的错误

Kinect NullReferenceException error

如果没有匹配where子句的值,那么FirstOrDefault()将返回null(假设SkeletonData是一个类)-所以我怀疑就是这种情况。

如果你的代码要依赖于至少有一个结果,最好调用First()而不是FirstOrDefault,以避免隐藏错误。我个人也不会使用查询表达式:

SkeletonData data = skeletonSet.Skeletons
               .Where(s => s.TrackingState == SkeletonTrackingState.Tracked)
               .First();

或者,如注释中所指出的,使用First的重载,它接受一个谓词:

SkeletonData data = skeletonSet.Skeletons
               .First(s => s.TrackingState == SkeletonTrackingState.Tracked);

您的数据变量可能为空。在该行上设置一个断点,并在本地监视窗口中查看它。