声明在`using'块中的`foreach`之后没有触发

时间:2012-12-08 18:09:03

标签: c# event-handling foreach using

我正在尝试在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.");
}

2 个答案:

答案 0 :(得分:1)

查看代码,没有明显的理由让它不起作用。我怀疑它与using()块有什么关系。

请检查以下内容:

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

答案 1 :(得分:0)

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

        StringBuilder bitString = new StringBuilder("0");
        depthFrame.CopyPixelDataTo(bits);
        foreach (var bit in bits)
        {
            sb.Append(bit.ToString();
        }
        Program.Broadcast(bitString.ToString());