我有一个复杂的WPF应用程序,用于某种PA系统。它会不时地显示视频,有时它会在屏幕上播放音乐和不同的短信。
结构非常简单。有一个服务器有2种方法。 SetMessage( “字符串”);和GetMessage(“String”);
客户端在5秒内通过WCF上的HTTP绑定连接到服务器并拉取GetMessage()。 Admin app连接到服务器并调用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
现在这很酷。然而问题是:
看起来我只是违反了一些访问权限并试图从另一个线程中更改代码中的内容。
有趣的是,我试图做ILDasm并找到P7:219并且代码中没有。
有没有办法赶上那个怪异的例外?
(我实际上花了大约30分钟,试图在这里找到任何类似的问题,但我的代码中已经应用了所有解决方案)
Thanx寻求帮助。
答案 0 :(得分:1)
我认为你是在某个地方开始一个新的线程,它有自己的调度员 请看一下msdn在这个链接上给出的评论 http://msdn.microsoft.com/en-us/library/system.windows.application.dispatcherunhandledexception.aspx
应用程序针对主UI线程上运行的代码未处理的每个异常引发DispatcherUnhandledException。 如果在后台用户界面(UI)线程(具有自己的Dispatcher的线程)或后台工作线程(没有Dispatcher的线程)上未处理异常,则不会将异常转发到主UI线程。因此,不会引发DispatcherUnhandledException。在这些情况下,您需要编写代码来执行以下操作: 处理后台线程上的异常。 将这些异常分派给主UI线程。 在主UI线程上重新抛出它们而不处理它们以允许引发DispatcherUnhandledException。
只是为了获取信息,即使您正在实现所有这些异常处理程序,也无法通过它自己的调度程序捕获错误
希望这可以帮到你
答案 1 :(得分:0)
毕竟这很容易。
我没有跟踪堆栈来找出问题所在。我试图做nlog,WER和许多其他的事情,但我没有得到真正的跟踪堆栈。
当我感兴趣时,我决定检查Windows日志,我发现在记录错误后Windows确实记录了堆栈跟踪!它允许我在几秒钟内找到错误。
问题是在线程池中的工作中生成异常。