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

わかりましたので、私の問題に対する答えが見つかりました。とてもシンプルです。

システム/マシンが過負荷になっている場合、または他の理由で速度が低下している場合は、フレームが思ったほど速く分析されません。このラグが発生すると、フレームを開くことができません。それが私がnullになる理由です。

問題の以下の解決策

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 に答える