我正在使用以下内容将传入的字节数组数据从网络流转换为图像以显示在屏幕上,但经过一段时间的运行后,我不断得到异常“没有找到适合完成此操作的成像组件。”内部异常“无法找到组件。(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;
}
}
答案 0 :(得分:0)
临时解决方案(我知道这不是很好的编程)但只是在catch块中什么都不做就能让我绕过错误并继续运行。暂时会做,直到我得到更好的解决方案。
答案 1 :(得分:0)
你将流分解为256kB(略小于256kiB)的块,我假设这是一个任意选择的大小,但是你假设每个块只包含一个图像。当那个假设中断(可能总是)你的代码中断。
为什么不只是使用StreamSource = networkStream;
?