在C#中是否有办法从控件/表单中捕获所有异常?

时间:2009-03-08 08:17:32

标签: c# exception-handling

我希望对于驻留在当前线程中的Control或Form内部引发的异常具有类似“全能”的内容,但不需要使用{{ 1}}整个帖子。

为什么呢?因为我想保持异常处理模块化。

所有可能导致问题的代码都在当前线程中运行的Form(Application.ThreadException)内运行。我希望能够将所有这些异常包含在其他异常(DummyForm)中,这个异常会将Form标识为异常的原因,这样如果该异常使其成为Application.ThreadException,我可以知道清理涉及关闭DummyFormException

我认为,替代方案是:

#用DummyForm包裹DummyForm中的每个抛出异常。我不太喜欢这个,因为它要求未来的程序员记住包装每个抛出的异常。  #在自己的线程中运行DummyFormException,并使用DummyForm来捕获它们,并识别该代码中的线程。一旦我知道它来自哪里,我就可以关闭Application.ThreadException并结束线程。

如果没有多线程,有没有办法做到这一点?我讨厌这样做,只是为了处理错误而浪费。或者我是不是错了?

2 个答案:

答案 0 :(得分:4)

我不确定将所有错误处理代码放在一个地方是个好主意。

错误处理最好在它处理的操作旁边进行。

错误处理的重点是更改程序遇到错误的程序行为。这意味着您必须在该位置编写特定代码,并且您不能将所有内容放在您想要的任何位置。

然而,也许你需要的只是一个帮助记录东西的方法等。


未处理的异常处理程序(Application.ThreadException,AppDomain.CurrentDomain.UnhandledException)确实存在,但这不是它们的用途。

您应该使用它们来处理意外的异常,即发生了一些你没想到的错误,并且你想要很好地处理这种情况(例如,你可能想记录错误,或者显示一个很好的错误框到用户,或轻轻关闭程序)

如果你知道某个地方可能会发生异常,“某处”是编写异常处理代码的好地方。

答案 1 :(得分:2)

听听Brann的说法,否则你可能会在thedailywtf.com上结束: - )

将它留给全局错误处理程序会给你带来各种各样的痛苦。确保您的应用程序中的任何例外都在处理处理 - 这是您有权决定如何处理它的正确信息。