服务器计算机上的GDI +中发生了一般错误

时间:2013-08-13 07:39:29

标签: c# .net image visual-studio-2010 gdi

我尝试了许多解决方案来删除GDI +中发生的通用错误但是没有任何对我有用,我发布了我曾经使用过的代码。这个错误发生在服务器机器上 图像字节在数据库中成功存储,但在PictureBox上无法检索。

第一种方法:
ODetail.InsuranceCardImages 包含来自数据库的图像的字节
pcinsurance 是我的PictureBox

                    System.Byte[] imagefront = (byte[])oDetail.InsuranceCardImage;
                    //this.pcInsurance.Image = Utility.byteArrayToImage(oDetail.InsuranceCardImage);

                    MemoryStream ms = new MemoryStream(imagefront);
                    try
                    {
                        //Process currentProcess1 = Process.GetCurrentProcess();
                        Image returnImage = Image.FromStream(ms);
                        pcInsurance.Image= returnImage;
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }
                    finally
                    {
                        try
                        {

                            ms.Flush();
                            ms.SetLength(0);
                            ms.Close();
                            ms.Dispose();
                            ms = null;
                            //GC.Collect();

                        }
                        catch
                        {
                        }

                    }

第二种方法:
其中 pcinsurance 是我的PictureBox

byte[] byteArray = oDetail.InsuranceCardImage;
var imageStream = new MemoryStream(byteArray);
var image = (Bitmap)Bitmap.FromStream(imageStream);
pcInsurance.Image = image;

仍然无法解决这个问题,
请提供您的解决方案,以便我继续工作 谢谢。

1 个答案:

答案 0 :(得分:0)

为什么使用ms.Close();ms.Dispose();ms = null;

您将此流处理两次,然后将其设置为null。

最后始终执行,因此始终处置MemoryStream

我怀疑所有资源都是在之前发布的它们被GDI使用。我前段时间遇到过类似的问题。

根据MSDN: http://msdn.microsoft.com/en-us/library/93z9ee4x.aspx

  

您必须在图像的生命周期内保持流打开。

解决方案是创建Bitmap对象:

    Bitmap bmp = new Bitmap(ms);
    this.pcInsurance.Image = bmp;

实际上我使用using语句来简化代码,在最终括号之前关闭流。工作完全相同,但更短,在我看来更具可读性。

设置另一张图片之前,

Bitmappicturebox.Image个对象必须先处理

希望这有帮助。