【发布时间】:2013-09-12 18:27:53
【问题描述】:
我有一个复杂的 WPF 应用程序,用于某种 PA 系统。它会不时显示视频,有时还会在屏幕上播放音乐和不同的短信。
结构非常简单。有一个服务器有 2 种方法。 SetMessage("字符串");和 GetMessage("String");
客户端每 5 秒通过 WCF 上的 HTTP 绑定连接到服务器并拉取 GetMessage()。管理应用程序连接到服务器并调用 SetMessage()。
在 App.xml.cs 中,我有 CurrentDomain_UnhandledException、OnDispatcherUnhandledException、TaskScheduler.UnobservedTaskException 和 application.Current.DispatcherUnhnandledException 的处理程序。他们都假设做nlog并继续操作。
App中有一个页面使用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
现在这一切都很酷。然而问题是:
- 尽管有 4 个不同的异常处理程序,但我仍然收到异常
- 我无法在客户端计算机上进行调试
- 错误是随机的,但在我播放视频后发生。
- 停止和启动视频的代码在 Dispatcher.Invoke(new Action) 中。
- 我可能会在停止视频之前离开页面并切换到另一个页面。
看起来我只是违反了某些访问权限并试图从另一个线程更改代码中的某些内容。
有趣的是,我尝试做 ILDasm 并发现 P7:219 并且代码中没有。
有什么办法可以捕捉到那个该死的异常吗?
(我实际上花了大约 30 分钟,试图在这里找到任何类似的问题,但所有解决方案都已应用于我的代码中)
感谢您的帮助。
【问题讨论】:
-
将抛出异常的代码(可能是您传递给调度程序的
new Action)包装在try/catch 中,并在catch 块中的异常对象上调用Exception.ToString()。把它保存在某个地方。将其转储到磁盘,无论如何。还要记住,跨越线程边界的异常会破坏你的整个应用程序。但没有例外的细节......谁知道呢? -
是的,谢谢你,@Will。我会尝试。然而这就是问题所在,看起来我在线程之间,我实际上无法分辨是什么以及在哪里抛出哔哔声。我真的不知道是哪一种引发了异常。
-
您的第一步是追踪该异常对象。包装您怀疑使用它抛出的任何代码。一旦您获得完整的异常详细信息(您将从 ToString() 获得),edit 并在此处添加信息。或者你可能会找到你的解决方案。
-
您没有故障转储吗? stackoverflow.com/questions/3263813/…