0

イベント sensor_DepthFrameReady 内にスレッドを作成しましたが、実行すると SetImage1Frame 関数の 8 行目 (Depths[depth]++;) で例外がスローされ、次の例外がスローされます。

インデックスが配列の範囲外でした。(深さ = -1)

何がうまくいかないのですか?関数(SetImage1Frame)が複数回実行されていると思いますが、このメソッド(sensor_DepthFrameReady)でのみこの関数を使用しました!!

    void sensor_DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
    {
        short[] pixels;
        Thread th;
        using (frame=e.OpenDepthImageFrame())
        {
            if (frame!=null)
            {
                pixels = new short[frame.PixelDataLength];
                frame.CopyPixelDataTo(pixels);
                th = new Thread(() =>
                    SetImage1Frame(pixels));
                th.Start();
            }
        }     

    }
    int[] Depths=new int[4096];
    int depth=0;
    double chartBarWidth;
    void SetImage1Frame(short[] dpixels)
    {
        int maxValue = 0;
        for (int i = 0; i < dpixels.Length; i++)
        {
            depth = dpixels[i] >> DepthImageFrame.PlayerIndexBitmaskWidth;
            if (depth > 0)
            {
                Depths[depth]++;
            }
        }
        for (int i = 0; i < Depths.Length; i++)
        {
            maxValue=Math.Max(maxValue,Depths[i]);
        }

        for (int i = 0; i < Depths.Length; i++)
        {
            if (Depths[i] > 0)
            {
                stackPanel1.Dispatcher.Invoke(new Action(() =>
                {
                    Rectangle r = new Rectangle();
                    stackPanel1.Children.Add(r);
                }));
            }
        }
        image1.Dispatcher.BeginInvoke(new Action(() =>
        {
            WrbitmapImage.WritePixels(rect, dpixels, stride, 0);
        }));

    }
4

1 に答える 1