繁体   English   中英

在WPF中调试未处理的异常

[英]Debug unhandled exceptions in WPF

我有一个用于某种PA系统的复杂WPF应用程序。 它会不时显示视频,有时还会在屏幕上播放音乐和其他短信。

结构非常简单。 有一个具有两种方法的服务器。 SetMessage( “字符串”); 和GetMessage(“ String”);

客户端每5秒钟通过WCF上的HTTP绑定连接到服务器,并提取GetMessage()。 管理应用程序连接到服务器并调用SetMessage()。

在App.xml.cs中,我有一个CurrentDomain_UnhandledException,OnDispatcherUnhandledException,TaskScheduler.UnobservedTaskException和application.Current.DispatcherUnhnandledException的处理程序。 他们所有人都想进行nlog并继续操作。

应用程序中有一个页面使用Media元素播放短视频。 播放视频后,我有时会出现应用崩溃的情况。

EventType : clr20r3
P1        : Client.exe
P2        : 0.0.2.0
P3        : 5226863e
P3        : mscorlib
P5        : 4.0.0.0
P6        : 4ba1da6f
P7        : 219
P8        : 10
P9        : system.invalidoperaionexception

现在一切都很酷。 但是问题是:

  1. 尽管有4个不同的异常处理程序,但我仍在获取异常
  2. 我无法在客户端计算机上进行调试
  3. 错误是随机的,但会在我播放视频后发生。
  4. 停止和启动视频的代码位于Dispatcher.Invoke(新操作)中。
  5. 在停止播放视频之前,我可能会离开页面并切换到另一页面。

看起来我只是在侵犯某些访问权限,并试图从另一个线程更改代码中的某些内容。

有趣的是,我尝试执行ILDasm并发现P7:219,并且代码中没有任何内容。

有什么办法可以捕捉到这个异常的异常?

(我实际上花了大约30分钟的时间,试图在这里找到任何类似的问题,但是所有解决方案都已经在我的代码中应用了)

感谢您的帮助。

我认为您正在使用自己的调度程序来启动新线程
请看一下msdn在此链接上的评论
http://msdn.microsoft.com/en-us/library/system.windows.application.dispatcherunhandledexception.aspx

应用程序针对主UI线程上运行的代码未处理的每个异常引发DispatcherUnhandledException。 如果在后台用户界面(UI)线程(具有自己的Dispatcher的线程)或后台工作线程(没有Dispatcher的线程)上均未处理异常,则该异常不会转发到主UI线程。 因此,不会引发DispatcherUnhandledException。 在这些情况下,您将需要编写代码来执行以下操作:处理后台线程上的异常。 将这些异常分配给主UI线程。 将它们重新扔到主UI线程上而不进行处理,以允许引发DispatcherUnhandledException。

仅作为参考,即使您正在实现所有这些异常处理程序,也无法使用其自身的调度程序捕获错误

希望这可以帮到你

好吧,毕竟这很容易。

我没有跟踪堆栈来解决问题。 我尝试做nlog,WER和许多其他事情,但是我没有得到真正的跟踪堆栈。

当出于兴趣,我决定检查Windows日志时,我发现在记录错误后,Windows确实记录了堆栈跟踪! 它使我可以在几秒钟内找到错误。

问题是在线程池中的工作中异常产生的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM