MemoryStream 的 ReadTimeout 异常
ReadTimeout exception with MemoryStream
下面的方法抛出这个异常
System.IO.Stream)(ms)).ReadTimeout threw an exception of type
System.InvalidOperationException'
这是方法:
private static byte[] ImageToByteArraybyMemoryStream(Bitmap bmp)
{
using (MemoryStream ms = new MemoryStream()) {
bmp.Save(ms, bmp.RawFormat);
return ms.ToArray();
}
}
然而,这个错误并不是一直都会发生。我将尝试简短地解释会发生什么:
- 我从文件加载位图,显示它并将其存储在
Dictionary<int,Bitmap>
- 当应用程序关闭时,我将位图作为
byte[]
写入应用程序配置文件(没有例外)
- 在应用程序启动时,我从配置文件加载位图并显示它
- 当用户更改应用程序数据(如调整位图大小或移动位图)时,我重写配置文件的方式与从文件加载位图时所做的方式相同,并且出现此异常.
我刚刚用谷歌搜索 "generic gdi+ error" 其他人也遇到了 bmp.Save 方法的问题。他们的解决方法是从您要保存的位图创建一个新位图,然后保存此副本。
...
Bitmap copy = new Bitmap(bmp);
copy.Save(ms, copy.RawfFormat);
...
也许这对你也有效,我不能告诉你这个错误的原因,它在其他网站上被称为错误。
Other Post discussing this Problem
我遇到了这个问题,花了一段时间才明白,上传图片的对象并没有释放其定位的内存并锁定它!并且垃圾回收没有处理该对象,因此 API 无法流式传输图像。
不知何故它第一次工作然后它会引发错误。
解决方法:
我使用 HttpPostFileBase
上传图片,完成后我将其设置为 null
就是这样!
下面的方法抛出这个异常
System.IO.Stream)(ms)).ReadTimeout threw an exception of type System.InvalidOperationException'
这是方法:
private static byte[] ImageToByteArraybyMemoryStream(Bitmap bmp)
{
using (MemoryStream ms = new MemoryStream()) {
bmp.Save(ms, bmp.RawFormat);
return ms.ToArray();
}
}
然而,这个错误并不是一直都会发生。我将尝试简短地解释会发生什么:
- 我从文件加载位图,显示它并将其存储在
Dictionary<int,Bitmap>
- 当应用程序关闭时,我将位图作为
byte[]
写入应用程序配置文件(没有例外) - 在应用程序启动时,我从配置文件加载位图并显示它
- 当用户更改应用程序数据(如调整位图大小或移动位图)时,我重写配置文件的方式与从文件加载位图时所做的方式相同,并且出现此异常.
我刚刚用谷歌搜索 "generic gdi+ error" 其他人也遇到了 bmp.Save 方法的问题。他们的解决方法是从您要保存的位图创建一个新位图,然后保存此副本。
...
Bitmap copy = new Bitmap(bmp);
copy.Save(ms, copy.RawfFormat);
...
也许这对你也有效,我不能告诉你这个错误的原因,它在其他网站上被称为错误。
Other Post discussing this Problem
我遇到了这个问题,花了一段时间才明白,上传图片的对象并没有释放其定位的内存并锁定它!并且垃圾回收没有处理该对象,因此 API 无法流式传输图像。 不知何故它第一次工作然后它会引发错误。
解决方法:
我使用 HttpPostFileBase
上传图片,完成后我将其设置为 null
就是这样!