堆栈跟踪中的ThreadExceptionDialog存在通用GDI +错误

时间:2009-04-30 12:21:02

标签: .net winforms exception gdi+

我们收到了一些难以重现的错误报告。用户收到“发生错误。应用程序现在将退出。”消息框然后退出应用程序。

在Main()中,我将异常写入日志文件:

System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+.
at System.Drawing.Image.FromHbitmap(IntPtr hbitmap, IntPtr hpalette)
at System.Drawing.Image.FromHbitmap(IntPtr hbitmap)
at System.Drawing.Icon.ToBitmap()
at System.Windows.Forms.ThreadExceptionDialog..ctor(Exception t)
at System.Windows.Forms.Application.ThreadContext.OnThreadException(Exception t)
at System.Windows.Forms.Control.WndProcException(Exception e)
at System.Windows.Forms.Control.ControlNativeWindow.OnThreadException(Exception e)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at Wfm.AppMain.Main()

令我困惑的是ThreadExceptionDialog在堆栈跟踪中。我想这是显示“发生错误的对话框。应用程序现在将退出。”消息。

这是一个无关的错误还是重新抛出异常的对话框?我怎样才能获得原始异常?

2 个答案:

答案 0 :(得分:2)

看起来已经调用了OnThreadException方法,这意味着您应该能够为Application.ThreadException事件设置事件处理程序,以便更详细地检查异常。

答案 1 :(得分:1)

您需要转储文件,然后使用SOS获取堆栈中的所有异常对象 BTW该机器上的资源情况如何?看起来应用程序无法将图标转换为位图,这可能会在极端资源压力下发生。

您可以使用ADPlus in hang mode once创建转储,以查看异常窗口。