0

我正在尝试在块内的foreach迭代器中连接一些数据。using不幸的是,由于某种原因,我在失败后插入(或之后)using块中的任何语句foreach都无法触发。

来源:

static void sensor_DepthFrameReady(object sender, DepthImageFrameReadyEventArgs e)
{
    using (var depthFrame = e.OpenDepthImageFrame())
    {          
        if (depthFrame == null)
            return;
        short[] bits = new short[depthFrame.PixelDataLength];
        string bitString = "0";
        depthFrame.CopyPixelDataTo(bits);
        foreach (var bit in bits)
        {
            bitString += bit.ToString();
            Console.Write("This fires.");
        }
        Console.Write("This never fires and I don't know why.");
        Program.Broadcast(bitString); //this also fails to fire.
    }
    Console.Write("This never fires either.");
}
4

2 回答 2

1

查看代码没有明显的原因使它不起作用。using()我怀疑它与块有什么关系。

也许检查以下内容:

  1. 你的foreach循环终止了吗?数组中有多少个元素,bits“This Fires”被写了多少次?
  2. 控制台输出可能会被缓冲,并且在刷新之前您看不到任何打印内容。如果替换为 会发生Console.Write()什么Console.WriteLine()
  3. 执行可能在没有到达的情况下跳出循环的唯一另一种方法Program.Broadcast(bitString)是抛出异常。尝试将整个函数包装在一个try//构造catchfinally并打印发生的任何异常,并可能在finally块中打印一条消息,无论发生什么都应该打印。

希望有帮助。

于 2012-12-08T18:35:06.070 回答
0

也许 foreach 需要太长时间?尝试使用 StringBuilder。

        StringBuilder bitString = new StringBuilder("0");
        depthFrame.CopyPixelDataTo(bits);
        foreach (var bit in bits)
        {
            sb.Append(bit.ToString();
        }
        Program.Broadcast(bitString.ToString());
于 2012-12-08T18:16:17.480 回答