我正在尝试使用带有以下代码的嵌套 Parallel.For 循环将 kinect 深度数据写入文本文件。但是,它给出了IndexOutofRangeException
.
如果使用简单的 for 循环,该代码可以完美运行,但它会挂起 UI,因为深度格式设置为640x480
导致循环写入307200 lines
文本文件中的30fps
.
因此,我切换到并行。对于方案。如果我从嵌套循环中省略 writeLine 命令,则代码可以正常工作,这表明IndexOutofRangeException
在 writeline 命令中出现了。我不知道如何解决这个问题。请指教。
有没有更好的解决方法来避免 UI 冻结?
谢谢。
using (DepthImageFrame depthImageframe = d.OpenDepthImageFrame())
{
if (depthImageframe == null)
return;
depthImageframe.CopyPixelDataTo(depthPixelData);
swDepth = new StreamWriter(@"E:\depthData.txt", false);
int i = 0;
Parallel.For(0, depthImageframe.Width, delegate(int x)
{
Parallel.For(0, depthImageframe.Height, delegate(int y)
{
p[i] = sensor.MapDepthToSkeletonPoint(depthImageframe.Format,
x, y, depthPixelData[x + depthImageframe.Width * y]);
swDepth.WriteLine(i + "," + p[k].X + "," + p[k].Y + "," + p[k].Z);
i++;
});
});
swDepth.Close();
}
}