イベント 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);
}));
}