C# 调试WPF中未处理的异常
我有一个复杂的WPF应用程序,用于某种PA系统。它会不时播放视频,有时还会在屏幕上播放音乐和不同的文字信息 结构非常简单。有一个服务器有两种方法。设置消息(“字符串”);和GetMessage(“字符串”) 客户端每5秒钟通过WCF上的HTTP绑定连接到服务器一次,并提取GetMessage()。Admin应用程序连接到服务器并调用SetMessage() 在App.xml.cs中,我有CurrentDomain_UnhandledException、OnDispatcherUnhandledException、TaskScheduler.UnobservedTaskeException和application.Current.DispatcherUnhandledException的处理程序。它们都假设进行nlog并继续运行 应用程序中有一个页面使用媒体元素播放短视频。视频播放后,我的应用程序不时崩溃C# 调试WPF中未处理的异常,c#,wpf,wcf,video,C#,Wpf,Wcf,Video,我有一个复杂的WPF应用程序,用于某种PA系统。它会不时播放视频,有时还会在屏幕上播放音乐和不同的文字信息 结构非常简单。有一个服务器有两种方法。设置消息(“字符串”);和GetMessage(“字符串”) 客户端每5秒钟通过WCF上的HTTP绑定连接到服务器一次,并提取GetMessage()。Admin应用程序连接到服务器并调用SetMessage() 在App.xml.cs中,我有CurrentDomain_UnhandledException、OnDispatcherUnhandledE
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
现在一切都好了。但问题是:
Thanx寻求帮助。我认为您正在某个地方使用自己的dispatcher启动一个新线程
请查看msdn在此链接上给出的备注
对于主UI线程上运行的代码未处理的每个异常,应用程序都会引发DispatcherUnhandledException。 如果在后台用户界面(UI)线程(具有自己的调度程序的线程)或后台工作线程(没有调度程序的线程)上未处理异常,则不会将异常转发到主UI线程。因此,不会引发DispatcherUnhandledException。在这些情况下,您需要编写代码来执行以下操作: 在后台线程上处理异常。 将这些异常分派到主UI线程。 在主UI线程上重新显示它们,而不处理它们,以允许引发DispatcherUnhandledException 仅提供信息,即使您正在实现所有这些异常处理程序,您也无法用它自己的调度程序捕获bug
希望这能帮助您我认为您正在使用自己的dispatcher启动一个新线程
请查看msdn在此链接上给出的备注
对于主UI线程上运行的代码未处理的每个异常,应用程序都会引发DispatcherUnhandledException。 如果在后台用户界面(UI)线程(具有自己的调度程序的线程)或后台工作线程(没有调度程序的线程)上未处理异常,则不会将异常转发到主UI线程。因此,不会引发DispatcherUnhandledException。在这些情况下,您需要编写代码来执行以下操作: 在后台线程上处理异常。 将这些异常分派到主UI线程。 在主UI线程上重新显示它们,而不处理它们,以允许引发DispatcherUnhandledException 仅提供信息,即使您正在实现所有这些异常处理程序,您也无法用它自己的调度程序捕获bug
希望这能帮助你毕竟这很容易 我没有跟踪堆栈来解决问题。我试着去做nlog,WER和许多其他的事情,但我没有得到真正的跟踪堆栈 当我出于兴趣决定检查Windows日志时,我发现在错误日志之后,Windows确实记录了堆栈跟踪!它让我在几秒钟内找到了错误
在线程池中的工作中生成了异常问题 毕竟这很容易 我没有跟踪堆栈来解决问题。我试着去做nlog,WER和许多其他的事情,但我没有得到真正的跟踪堆栈 当我出于兴趣决定检查Windows日志时,我发现在错误日志之后,Windows确实记录了堆栈跟踪!它让我在几秒钟内找到了错误
在线程池中的工作中生成了异常问题 在catch块的exception对象上,将引发异常的代码(可能在传递给调度程序的
new Action
中)包装为try/catch-and-callexception.ToString()
。留着吧。把它转储到磁盘,随便什么。另外,请记住,跨越线程边界的异常会破坏整个应用程序。但是没有例外的细节。。。谁知道呢?是的,谢谢你,威尔。我试试看。但这就是问题所在,看起来我在两条线之间,实际上我无法说出发出声音的原因和地点。我真的不知道是哪个PEICE抛出了异常。你的第一步是跟踪那个异常对象。包装您怀疑与之一起抛出的任何代码。一旦获得了完整的异常详细信息(将从ToString()获得),并在此处添加信息。或者你可以找到你的解决方案。你没有崩溃转储吗?将引发异常的代码(可能在传递给调度程序的新操作中)包装在ca中异常对象的try/catch-and-callexception.ToString()
中