首先,在Program.Program()
静态构造函数中,我有这段代码:
AppDomain.CurrentDomain.UnhandledException += (s, eargs) =>
LogException((Exception)eargs.ExceptionObject);
Application.ThreadException +=
(s, eargs) => LogException(eargs.Exception);
然后,如果我故意做(例如)除零,它就会被抓住。但是,线程循环中没有其他异常被捕获,就像这一个 - 它的堆栈跟踪是:
System.ComponentModel.ReflectPropertyDescriptor.GetValue(component = {My.Component})
System.Windows.Forms.BindToObject.GetValue()
System.Windows.Forms.Binding.PushData(force)
System.Windows.Forms.Binding.UpdateIsBinding()
System.Windows.Forms.Binding.CheckBinding()
System.Windows.Forms.Binding.SetListManager(bindingManagerBase)
System.Windows.Forms.ListManagerBindingsCollection.AddCore(dataBinding = {System.Windows.Forms.Binding})
System.Windows.Forms.BindingsCollection.Add(binding)
System.Windows.Forms.BindingContext.UpdateBinding(newBindingContext, binding)
System.Windows.Forms.Control.UpdateBindings()
System.Windows.Forms.Control.OnBindingContextChanged(e = {System.EventArgs})
System.Windows.Forms.Control.OnParentBindingContextChanged(e)
System.Windows.Forms.Control.OnBindingContextChanged(e = {System.EventArgs})
System.Windows.Forms.Control.OnParentBindingContextChanged(e)
System.Windows.Forms.Control.OnBindingContextChanged(e = {System.EventArgs})
System.Windows.Forms.Control.OnParentBindingContextChanged(e)
System.Windows.Forms.Control.OnBindingContextChanged(e = {System.EventArgs})
System.Windows.Forms.Control.OnParentBindingContextChanged(e)
System.Windows.Forms.Control.OnBindingContextChanged(e = {System.EventArgs})
System.Windows.Forms.Control.CreateControl()
System.Windows.Forms.Control.SetVisibleCore(value = true)
System.Windows.Forms.TabPage.Visible.set(value)
System.Windows.Forms.TabControl.UpdateTabSelection(updateFocus = false)
System.Windows.Forms.TabControl.OnHandleCreated(e)
System.Windows.Forms.Control.WmCreate(m)
System.Windows.Forms.Control.WndProc(m)
System.Windows.Forms.TabControl.WndProc(m)
System.Windows.Forms.Control.ControlNativeWindow.OnMessage(m)
System.Windows.Forms.Control.ControlNativeWindow.WndProc(m)
System.Windows.Forms.NativeWindow.Callback(hWnd, msg = 0x00000001, wparam, lparam)
[Native to Managed Transition]
[Managed to Native Transition]
System.Windows.Forms.UnsafeNativeMethods.CreateWindowEx(dwExStyle, lpszClassName, lpszWindowName, style, x, y, width, height, hWndParent, hMenu, hInst, pvParam)
System.Windows.Forms.NativeWindow.CreateHandle(cp)
System.Windows.Forms.Control.CreateHandle()
System.Windows.Forms.TabControl.CreateHandle()
System.Windows.Forms.Control.CreateControl(fIgnoreVisible = false)
System.Windows.Forms.Control.CreateControl(fIgnoreVisible = false)
System.Windows.Forms.Control.CreateControl(fIgnoreVisible = false)
System.Windows.Forms.Control.CreateControl(fIgnoreVisible = false)
System.Windows.Forms.Control.CreateControl()
System.Windows.Forms.Control.WmShowWindow(m)
System.Windows.Forms.Control.WndProc(m)
System.Windows.Forms.ScrollableControl.WndProc(m)
System.Windows.Forms.ContainerControl.WndProc(m)
System.Windows.Forms.Form.WmShowWindow(m)
System.Windows.Forms.Form.WndProc(m)
System.Windows.Forms.Control.ControlNativeWindow.OnMessage(m)
System.Windows.Forms.Control.ControlNativeWindow.WndProc(m)
System.Windows.Forms.NativeWindow.Callback(hWnd, msg = 0x00000018, wparam, lparam)
[Native to Managed Transition]
[Managed to Native Transition]
System.Windows.Forms.Control.SetVisibleCore(value = true)
System.Windows.Forms.Form.SetVisibleCore(value = true)
System.Windows.Forms.Control.Visible.set(value)
System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(reason = 0xffffffff, context = {System.Windows.Forms.ApplicationContext})
System.Windows.Forms.Application.ThreadContext.RunMessageLoop(reason, context)
System.Windows.Forms.Application.Run(mainForm)
My.Namespace.Program.Main()
[Native to Managed Transition]
[Managed to Native Transition]
System.AppDomain.ExecuteAssembly(assemblyFile, assemblySecurity, args)
Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
System.Threading.ThreadHelper.ThreadStart_Context(state)
System.Threading.ExecutionContext.Run(executionContext, callback, state)
System.Threading.ThreadHelper.ThreadStart()
当ReflectPropertyDescriptor
调用我的代码并且我抛出一个自定义异常时,系统会静默地吞下它并且我无法记录它。
答案 0 :(得分:0)
事实证明,在BindingComplete
事件中可以看到我失去的大多数异常。它必须这样做。