try
    {
        Int32 I=0;
        while(true)
        {
            System.Drawing.Bitmap bmpT=new Bitmap(16,16);
            //下面几行去掉则不出错!
            for(Int32 i=0;i<10;i++)
            {
                
                bmpT.SetPixel(rndT.Next(16),rndT.Next(16),
                System.Drawing.Color.FromArgb(rndT.Next(255),rndT.Next(255),rndT.Next(255)));
            }
            //就是上面几句
            System.Drawing.Graphics gpT=System.Drawing.Graphics.FromImage(bmpT);
            this.Icon =System.Drawing.Icon.FromHandle(bmpT.GetHicon());
            gpT.Dispose();
            bmpT.Dispose();
            I++;
        }
    }
    catch (Exception E)
    {
        System.Console.WriteLine("I="+I);
        System.Console.WriteLine(E.Message);
        this.Close();
    }
==============================================
I=3320
GDI+ 中发生一般性错误。
程序“[588] Study.exe”已退出,返回值为 0 (0x0)。
==============================================怎么回事????????

解决方案 »

  1.   

    应该是堆栈溢出.你都catch了,该设个断点,从 E 里面多监视一些信息.
      

  2.   

    应该不是死循环和堆栈溢出的问题,我在上的的例子是改了一下代码让大家看的,实际我是在Timer_Tich事件中反复执行中间的代码出错。
    我的认为是GDI没有自动释放无用的Icon句柄,导致Icon的句柄溢出,但是又找不到相应的函数可以释放Icon句柄。唉
      

  3.   

    可以自己先建几十个Icon备用,需要的时候再拿出来,就不用考虑销毁的问题了。