【发布时间】:2011-04-01 20:27:39
【问题描述】:
我有一个未处理的异常处理程序。它显示了一个漂亮的 GUI,并允许用户发送错误报告。用户甚至可以留下他们的姓名和电话号码等,我们的支持部门会给他们回电。效果很好,看起来不错,让客户不那么生气。理论上,无论如何。
问题是我的应用程序使用后台线程,并且线程似乎并不关心是否在 GUI 线程上引发了异常(这是有道理的),而只是继续他们的工作。如果用户让我的自定义异常处理程序窗口保持打开足够长的时间,最终会导致弹出一个 WER 对话框,使其看起来像是错误处理程序本身崩溃了。
我无权访问异常处理程序范围内的线程对象,因此我无法挂起它们。使线程对象全局可访问也不是解决方案。我现在的解决方法是在我的异常处理程序中使用Globals.Crashed = true; 之类的东西,并让我的线程方法在每次循环迭代时检查该属性。不完美,但可以将伤害降到最低。
有没有人知道一个不那么hacky的方法?我的方法错了吗?我是否必须像 WER 那样启动一个外部程序来暂停主程序并显示错误 UI?
【问题讨论】:
-
如果这个技巧足够好,我会坚持下去。
标签: c# multithreading exception windows-error-reporting