1

你好,我NullReferenceException在运行这个时得到一个:

void newSensor_AllFramesReady(object sender, AllFramesReadyEventArgs e)
    {
        Skeleton first = GetFirstSkeleton(e);
        if (first == null)
        {
            return;
        }
        /**
         * @TODO
         * obsluzyc wyjatek null reference na wypadek gdy gubi szkielet
         */ 
        long timestamp = e.OpenSkeletonFrame().Timestamp;

它在long timestamp

如果相同的动作,它会在 10-15 秒内发生。例如,我正在记录一些静止的数据。我将它们记录在每一帧中。几秒钟后,我得到了NullReferenceException.

问题是什么?

4

1 回答 1

1

好的,所以我找到了我的问题的答案。这很简单。

当我的系统/机器超载或由于任何其他原因而减速时,帧的分析速度不如他们想象的那么快。当这种滞后发生时,我无法打开框架。这就是为什么我得到空值。

问题的波纹管解决方案

bool haveSkeletonData = false;
using (SkeletonFrame skeletonFrame = e.OpenSkeletonFrame())
{
if (skeletonFrame != null)
{
    if ((this.skeletonData == null) || (this.skeletonData.Length != skeletonFrame.SkeletonArrayLength))
    {
        this.skeletonData = new Skeleton[skeletonFrame.SkeletonArrayLength];
    }
    skeletonFrame.CopySkeletonDataTo(skeletonData);
    haveSkeletonData = true;
}
else
{
    haveSkeletonData = false;
}
}

if (haveSkeletonData)
{
   // here i can put code that is using my timestamp 
}

这样我就可以避免 null 并且我可以根据需要使用我的时间戳:)

于 2012-05-15T19:53:33.550 回答