winform程序中写了如下代码,目的是在程序运行的时候加载一些图片。public  void fSetBottonImage(Button btnImage,String sImageName)
        {
            Image m_Image = null;
            try
            {
                String sFile = ".\\Pic\\" + sImageName;
                if (File.Exists(sFile))
                {
                    m_Image = Image.FromFile(sFile);
                    btnImage.Image = m_Image;
                }
            }
            catch
            {            }
            finally
            {
                if (m_Image != null) m_Image.Dispose();
            }
        }有两个问题
1、如果m_Image.Dispose()就会报parameter is not valid
2、如果不释放的话,form打开的时候就会刷新的非常厉害。一开始我是放在form_load里面执行的,后来改成放在InitializeComponent()执行还是一样刷新的厉害,屏幕一直抖动。请各位高手指点如何解决。

解决方案 »

  1.   

    猜测一下:
    1。楼主以前用过vs2003
    2。搂住最近一段时间用的是vc2003里需要这样写,2005里好像不用这么做了。你的问题中,
    1。这个可能是你理解错误,btnImage.Image = m_Image;
    这句并没有拷贝图片,只是btnImage.Image这个引用,指向了一个对象。然后,你把对象释放了。这个不知道你别的地方怎么试用这个Image了。因为你释放了。自然没了。提示参数错误的话。你可以看看,是不是因为这个引用的问题。2。这个就不知道了。只有看了你代码才清楚。如果你自己做的图片控件。可以考虑重写OnPaint方法,并且不要调用base.OnPaint(e);这个方法。因为调用那个还是很慢的哦。
      

  2.   

    看看 使用 双缓冲 能否解决http://blog.csdn.net/ifooler/archive/2007/05/06/1598447.aspx
      

  3.   

    可能我描述的不是很清楚。
    关于第一个问题可能就如wuyazhe(wyz&xyl)所说的原因。
    但是第二个问题不是这样。
    我的意思是想在一个button上面设置一个image图片,不是重新绘图。如果是1个button的话还没有什么问题,如果是多个的话,窗口已经出现了,但是button上面的图片却是在窗口出现之后一个一个的显示出来,看起来就特别的不舒服。我想达到的目的是图片都设置完了,然后窗口才出现。这样就么有闪烁的感觉了。还要说明的是当然可以先在button的属性上面设置,但是我需要的是通过程序设置。谢谢!