1、错误提示
---------------------------
Prompt
---------------------------
Error:
GDI+ 中发生一般性错误。
Stack Trace: 在 System.Drawing.Graphics.get_Clip()
在 System.Drawing.GraphicsContext..ctor(Graphics g)
在 System.Drawing.Graphics.Save()
在 System.Windows.Forms.PaintEventArgs.get_Graphics()
在 System.Windows.Forms.GroupBox.OnPaint(PaintEventArgs e)
在 System.Windows.Forms.Control.PaintWithErrorHandling(PaintEventArgs e, Int16 layer)
在 System.Windows.Forms.Control.OnPrint(PaintEventArgs e)
在 System.Windows.Forms.Control.WmPrintClient(Message& m)
在 System.Windows.Forms.Control.WndProc(Message& m)
在 System.Windows.Forms.GroupBox.WndProc(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
在 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
---------------------------
中止(A) 重试(R) 忽略(I)
---------------------------
2、GDI+的前世今生
GDI+全称图形设备接口,Graphics Device Interface (GDI) ,他的爸爸叫做GDI, 用C写的。Windows XP出来以后用C++重新写了一下,变成了GDI+。从.NET Framework 1.0开始,GDI+就被正式封装在了.NET Framework里面,并被广泛地应用到了所有和图形图像相关的程序中。不幸的是,这个GDI+引入了微软有史以来最大的2个patch,造成了Microsoft IT, Support, Developer, Tester的无数麻烦。[1][2]
GDI+没有用显卡加速,所以Windows Vista推荐用Windows Display Driver Model (WDDM)了,支持渲染,3D加速。不过普通的应用程序,用GDI/GDI+其实是完全足够了,所以GDI+是在微软平台上开发图形图像程序的最好选择了。至少现在没有听说微软准备重新写GDI。
GDI+ 可以用来做图形处理,也可以做图像处理。这里只分析几个使用.NET Framework容易出错的地方。
3、问题原因
1、刚开始怀疑是系统问题,因为这个是突然开始提示的,之前程序没有出现这个问题。
2、卸载了系统更新,卸载了问题发生后的软件,依然存在。
3、怀疑弹出的窗体问题,自己新建了一个全新的窗体,没有增加任何操作和业务的代码,仅仅是窗体,依然报错。
4、怀疑是编译工具和窗体组件的问题,修复后依然存在。
通过软件监控到报错时系统的操作后,发现了系统中有个读取xml文件的操作,而且是多线程进行实时读取,读取操作需要释放资源再打开。因为xml操作比较多,将操作最频繁的方法取消掉,再试,发现报错的频率明显降低。