在WPF中调试未处理的exception

我有一个复杂的WPF应用程序,用于某种PA系统。 它会不时地显示video,有时它会在屏幕上播放音乐和不同的文字信息。

结构很简单。 有一个服务器有2种方法。 SetMessage( “字符串”); 和GetMessage(“String”);

客户端在5秒内通过WCF上的HTTP绑定连接到服务器并提取GetMessage()。 Admin app连接到服务器并调用SetMessage()。

在App.xml.cs中,我有一个处理程序,用于CurrentDomain_UnhandledException,OnDispatcherUnhandledException,TaskScheduler.UnobservedTaskException和application.Current.DispatcherUnhnandledException。 所有人都假设要做nlog并继续操作。

应用程序中有一个页面使用Media元素播放短video。 播放video后不时发生应用程序崩溃。

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个不同的exception处理程序,我仍然在寻找exception
  2. 我无法在客户端计算机上进行调试
  3. 错误是随机的,但在我播放video后发生。
  4. 用于停止和启动video的代码位于Dispatcher.Invoke(新操作)中。
  5. 在停止播放video之前,我可能会离开页面并切换到另一个页面。

看起来我只是违反了一些访问并尝试从另一个线程中更改代码中的内容。

有趣的是,我试图做ILDasm并找到P7:219并且代码中没有。

有没有什么办法可以捕获那个怪异的例外?

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

Thanx寻求帮助。

我认为你是在某个地方开始一个新的线程与它自己的调度员
请看一下msdn在这个链接上给出的评论
http://msdn.microsoft.com/en-us/library/system.windows.application.dispatcherunhandledexception.aspx

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

只是为了获取信息,即使您正在实现所有这些exception处理程序,也无法通过它自己的调度程序捕获错误

希望这可以帮到你

毕竟这很容易。

我没有跟踪堆栈来找出问题所在。 我试图做nlog,WER和许多其他的事情,但我没有得到真正的跟踪堆栈。

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

问题是在线程池中的工作中生成exception。