none
e.Graphics.Clear() GDI+ 中发生一般性错误 RRS feed

  • 问题

  • 时不时的会一直报这个错误:

    代码如下:

            private void Change_boderColor(object sender, PaintEventArgs e)
            {
                Control contr = (Control)sender;
                try
                {
                    e.Graphics.Clear(contr.BackColor);
                    e.Graphics.DrawString(contr.Text, contr.Font, Brushes.Blue, 10, 1);
                    e.Graphics.DrawLine(Pens.Gray, 1, 7, 8, 7);
                    e.Graphics.DrawLine(Pens.Gray, e.Graphics.MeasureString(contr.Text, contr.Font).Width + 8, 7, contr.Width - 2, 7);
                    e.Graphics.DrawLine(Pens.Gray, 1, 7, 1, contr.Height - 4);
                    e.Graphics.DrawLine(Pens.Gray, 1, contr.Height - 2, contr.Width - 2, contr.Height - 2);
                    e.Graphics.DrawLine(Pens.Gray, contr.Width - 2, 7, contr.Width - 2, contr.Height - 2);
                }
                catch (Exception ex)
                {
                    this.Refresh();
                    SettSSLText("重绘GroupBox外框", ex);
                }
                finally
                {
                    e.Graphics.Dispose();
                }
            }

    日志中会记录一大堆这样的错误:

    System.Runtime.InteropServices.ExternalException (0x80004005): GDI+ 中发生一般性错误 System.Drawing.Graphics.Clear(Color color)

    请教各位老师,这个什么问题?该如何解决?


    努力~

    2013年11月5日 8:01

答案

  • 你好:

    请问你是在Win7机器上运行你的程序的吗?

    如果不是的话,有可能是显卡驱动的问题。在Win7上面这是一个有GDI+内部修改引起的一个bug,请查看这个来自微软的反馈:

    Generic error in GDI+

    同时参考这篇微软kb中的解决方案:

    System.Runtime.InteropServices.ExternalException When Running Windows Forms Application in Terminal Server

    通过Application.ThreadException这个事件来捕获这个异常,自定义一个处理方法。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 zjyh16 2013年11月7日 4:08
    2013年11月6日 5:28
    版主

全部回复

  • 你好:

    请问你是在Win7机器上运行你的程序的吗?

    如果不是的话,有可能是显卡驱动的问题。在Win7上面这是一个有GDI+内部修改引起的一个bug,请查看这个来自微软的反馈:

    Generic error in GDI+

    同时参考这篇微软kb中的解决方案:

    System.Runtime.InteropServices.ExternalException When Running Windows Forms Application in Terminal Server

    通过Application.ThreadException这个事件来捕获这个异常,自定义一个处理方法。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    • 已标记为答案 zjyh16 2013年11月7日 4:08
    2013年11月6日 5:28
    版主
  • 谢谢!据目前运行看来大部分情况是在XP上运行引起的,windows7上运行还没捕捉到这个错误。目前捕捉到异常只是记录了错误日志,该自定义一个什么样的处理办法好呢。

    努力~

    2013年11月7日 4:08
  • 是不是只要是这个类型的异常直接return就不管了。

    if(e.Exception is System.Runtime.InteropServices.ExternalException)
    {
          return;
    }


    努力~

    2013年11月7日 4:18
  • 如果对你的程序不会产生什么严重影响的话,可以忽略这个错误或者是记录到日志里面。


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2013年11月7日 5:07
    版主