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
的错误
如果没有匹配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);
您的数据变量可能为空。在该行上设置一个断点,并在本地监视窗口中查看它。