将字节数组转换为Stream时,ReadTimeout引发异常

时间:2011-12-13 10:47:14

标签: c# asp.net

我收到了这个错误

ReadTimeout = '((System.IO.Stream)(ms)).ReadTimeout' threw an exception of type 'System.InvalidOperationException'.

我的代码是。

byte[] imageBytes = Convert.FromBase64String(img);
MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);     //Problem generates here//

谢谢..

4 个答案:

答案 0 :(得分:4)

仅当流支持超时时,您才能使用ReadTimeout / WriteTimeout属性。 您可以通过CanTimeout属性进行检查。如果CanTimeout属性返回false,则对这些属性的所有访问都应该引发InvalidOperationException。

答案 1 :(得分:0)

我使用了以下代码,我需要将MemoryStream用作电子邮件附件:

string filename=@"C:\images\myimage.img"
MemoryStream result = new MemoryStream();
MemoryStream source = new MemoryStream(File.ReadAllBytes(filename));
source.WriteTo(result);

答案 2 :(得分:-1)

必须覆盖ReadTimeout属性,它会在基础System.IO.Stream类中抛出System.InvalidOperationException错误by design

解决方法是在读取超时时不将ms强制转换为基类型:

int readTimeout = ms.ReadTimeout;

<击>

编辑:发布前没有检查.. MemoryStream也没有覆盖该属性 - 意味着没有实现此类流的超时。

您必须使用覆盖ReadTimeout属性的Stream类的其他实现,或编写您自己的实现。

答案 3 :(得分:-2)

您应该注意数据库中的图像类型,如果图像太大,则必须使用LONGBLOB而不是BLOB。