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

临时解决方案(我知道这不是很好的编程),但只要在 catch 块中什么都不做就可以让我绕过错误并继续运行。暂时会做,直到我得到更好的解决方案。

于 2013-06-06T17:57:49.447 回答
0

您将流分成 256kB(略小于 256kiB)的块,我认为这是任意选择的大小,但随后您假设每个块仅包含一个图像。当该假设(可能总是)中断时,您的代码就会中断。

你为什么不只是使用StreamSource = networkStream;

于 2013-06-06T20:17:47.547 回答