WPF:Dispatcher处理挂起错误,没有有用的堆栈跟踪

x33g5p2x  于 2023-06-24  发布在  其他
关注(0)|答案(1)|浏览(112)

我有一个已经运行了10多年的WPF应用程序。我们最近开始在启动时在一些机器上的一些部署中遇到以下异常。主应用程序窗口将加载,它可以加载一些数据,但随后会被许多错误淹没。
System. InvalidOperationException:调度程序处理已挂起,但仍在处理邮件。在系统。Windows。穿线调度员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。穿线ExceptionWrapper。系统上的InternalRealCall(委托回调,对象参数,Int32 numArgs)。Windows。穿线ExceptionWrapper。TryCatchWhen(Object source,Delegate callback,Object args,Int32 numArgs,Delegate catchHandler)
就这样...这就是堆栈跟踪... *
首先,我基本上理解了这意味着什么,解决方案是使用Application.Current.Dispatcher.BeginInvoke()来排队操作。事实上,MVVMLight有一个辅助函数DispatcherHelper.CheckBeginInvokeOnUI,可以首先检查是否需要调度器。
然而问题是这个堆栈跟踪并没有显示任何用户代码,这意味着我必须考虑我在过去十年中编写的所有代码,并将MessageBox.Show('Hi 244')放在我的代码中。如果有一个编码错误,我逃脱了它多年,从来没有在我的机器上。
这个问题通常发生在启动时,如果主窗口最终打开,那么程序似乎正常工作。

    • 什么是应用:**
  • . NET Framework 4.8/WPF/Windows 10 & 11
  • 仓库/客户服务中使用的自定义运输软件。
  • WPF/Xceed Data Grid/SmithHtmlEditor/MVVMLight
  • Microsoft.Mshtml.DLL用于HTML
  • 几年内无重大更新
    • 在哪里?**
  • 已部署的单击一次应用程序
  • Windows 10和11
  • . NET Framework 4.8.9166.0(来自RuntimeInformation. FrameworkDescription)
  • 其他框架版本
  • 带病毒防护和不带病毒防护的计算机
  • 大多数在启动后不久,至少有十个错误
  • 我的机器上都没有-)
    • 错误处理/调试步骤:**
  • 我在Application_DispatcherUnhandledExceptionTaskScheduler_UnobservedTaskException上有一个处理程序,用于跟踪错误
  • 分散我的代码与额外的Application.Current.Dispatcher.VerifyAccess(),但他们总是通过
  • 当谷歌搜索这个错误-其他人得到了一个有用的堆栈跟踪!

我怀疑最近的Windows更新改变了一些东西,但由于唯一失败的机器是非开发机器,而且对我来说很遥远,诊断起来很棘手(缓慢)。

uelo1irk

uelo1irk1#

所以:

  • 我设法远程连接到其中一台Windows 11机器
  • 安装Visual Studio 2022
  • 我可以在Release模式下用Ctrl + F5复制错误,但有相同的异常(和无用的堆栈跟踪)。
  • 然后我切换到Debug模式,并没有错误!
  • 我比较了DebugRelease的所有设置,并尝试将Prefer 32-bit更改为ON(以匹配Debug)。

突然间,一切都正常了,我的老板现在欣喜若狂,说他的机器从来没有运行得这么快过。
我仍然完全被难倒了,至于发生了什么,我真的很想更好地了解,如果有人知道,或可以建议额外的诊断或日志记录,我可以做。我想向微软报告这一点,但我没有复制。

相关问题