0

以下を使用して、ネットワークストリームから受信したバイト配列データを画像に変換して画面に表示しますが、しばらくすると正常に実行された後、「この操作を完了するのに適したイメージングコンポーネントが見つかりませんでした」という例外が発生し続けます。「コンポーネントが見つかりません。(HRESULT からの例外: 0x88982F50)」という内部例外があります。バッファサイズの問題を見てきましたが、それだけではないと思います。何かご意見は?

public static ImageSource ByteToImage(byte[] imageData)
    {
        BitmapImage biImg = new BitmapImage();
        MemoryStream ms = new MemoryStream(imageData);
        try
        {
            biImg.BeginInit();
            biImg.StreamSource = ms;
            biImg.EndInit();
        }
        catch ( Exception e)
        {
            MessageBox.Show("1"+ e.InnerException);
        }

        ImageSource imgSrc = biImg as ImageSource;

        return imgSrc;
    }

追加情報

これは、ネットワーク ストリームを受信して​​いる HandlerThread で使用しているものです。

NetworkStream networkStream = new NetworkStream(handlerSocket);
            int thisRead = 0;
            int blockSize = 256000;
            Byte[] dataByte = new Byte[blockSize];
            lock (this)
            {
                while (running)
                {
                    thisRead = networkStream.Read(dataByte, 0, blockSize);
                    Dispatcher.BeginInvoke(new ThreadStart(delegate 
       { pictureBox1.Source = ByteToImage(dataByte); }));

                    if (thisRead == 0) break;
                }
            }
4

2 に答える 2

0

ストリームを 256kB (256kiB より少し小さい) のブロックに分割していますが、これは任意に選択されたサイズであると想定していますが、各ブロックには正確に 1 つの画像が含まれていると想定しています。その仮定が破られると (おそらく常に)、コードが壊れます。

なぜあなただ​​けを使用していないのですStreamSource = networkStream;か?

于 2013-06-06T20:17:47.547 に答える