WPF启动时Dispatcher处理暂停异常排查求助(无有效堆栈)
我们有一款运行超10年的WPF应用,近期在部分部署机器启动时出现异常:主窗口加载并完成部分数据加载后,会触发大量错误。若主窗口最终打开,应用后续运行正常。
异常堆栈信息
System.InvalidOperationException: 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 System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
该堆栈无用户代码信息,无法定位问题。已知这类问题通常需要用Application.Current.Dispatcher.BeginInvoke()或MVVMLight的DispatcherHelper.CheckBeginInvokeOnUI处理,但因无有效堆栈,排查十年代码效率极低。
应用基本信息
-.NET Framework 4.8 / WPF / 适配Windows 10 & 11
-仓库/客服专用定制物流软件
-使用Xceed Data Grid、SmithHtmlEditor、MVVMLight组件
-依赖Microsoft.Mshtml.DLL处理HTML
-多年无重大更新
异常发生环境
-ClickOnce部署
-涉及Windows 10/11系统
-.NET Framework版本包含4.8.9166.0及其他版本
-有无杀毒软件的机器均出现异常
-多在启动后不久触发,至少出现10次错误
-开发机器无法复现
已完成的排查动作
-配置Application_DispatcherUnhandledException和TaskScheduler_UnobservedTaskException跟踪错误
-代码中添加Application.Current.Dispatcher.VerifyAccess()检查,均通过
-搜索发现其他用户遇到该异常时均有包含用户代码的有效堆栈
怀疑是近期Windows更新导致问题,但故障机器为远程非开发机,排查难度大,寻求可行的排查方案。
内容的提问来源于stack exchange,提问作者Simon_Weaver

