我遇到了与此处描述的问题相同的问题:
Dispatcher throws InvalidOperationException on Messagebox.Show in Textchanged event
虽然解决方案对我有用,但我想解决另一个问题:当我无法控制是否显示消息框(外部代码)时,如何从中优雅地恢复?
如果我设置e.Handled = false
,那么代码的其余部分会传播异常,直到它被其他地方捕获,它会使一些琐碎的警告或信息性消息框弄乱应用程序的其余部分。
另一方面,如果我设置e.Handled = true
调度程序未处理的异常处理程序被反复调用,直到我按下"确定"在消息框中,应用程序保持"冻结"。按暂停,这是调用堆栈:
新建:关闭MessageBox后按任意键(以窗口为中心)会导致应用程序解冻并继续正常执行。
如何在不破坏应用程序的情况下关闭MessageBox? (即使根本没有显示消息框)
修改
这里要求的是异常堆栈跟踪。
Dispatcher processing has been suspended, but messages are still being processed.
at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen(Object source, Delegate method, Object args, Int32 numArgs, Delegate catchHandler)
检测到更多行为,请参阅" 新"