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関数全体を//構文でラップして、発生した例外を出力してみてくださいcatch。場合によっては、何が起こっても出力する必要finallyのあるメッセージをブロックに出力してください。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 に答える