我希望对于驻留在当前线程中的Control或Form内部引发的异常具有类似“全能”的内容,但不需要使用{{ 1}}整个帖子。
为什么呢?因为我想保持异常处理模块化。
所有可能导致问题的代码都在当前线程中运行的Form(Application.ThreadException
)内运行。我希望能够将所有这些异常包含在其他异常(DummyForm
)中,这个异常会将Form标识为异常的原因,这样如果该异常使其成为Application.ThreadException,我可以知道清理涉及关闭DummyFormException
。
我认为,替代方案是:
#用DummyForm
包裹DummyForm
中的每个抛出异常。我不太喜欢这个,因为它要求未来的程序员记住包装每个抛出的异常。
#在自己的线程中运行DummyFormException
,并使用DummyForm
来捕获它们,并识别该代码中的线程。一旦我知道它来自哪里,我就可以关闭Application.ThreadException
并结束线程。
如果没有多线程,有没有办法做到这一点?我讨厌这样做,只是为了处理错误而浪费。或者我是不是错了?
答案 0 :(得分:4)
我不确定将所有错误处理代码放在一个地方是个好主意。
错误处理最好在它处理的操作旁边进行。
错误处理的重点是更改程序遇到错误的程序行为。这意味着您必须在该位置编写特定代码,并且您不能将所有内容放在您想要的任何位置。
然而,也许你需要的只是一个帮助记录东西的方法等。
未处理的异常处理程序(Application.ThreadException,AppDomain.CurrentDomain.UnhandledException)确实存在,但这不是它们的用途。
您应该使用它们来处理意外的异常,即发生了一些你没想到的错误,并且你想要很好地处理这种情况(例如,你可能想记录错误,或者显示一个很好的错误框到用户,或轻轻关闭程序)
如果你知道某个地方可能会发生异常,“某处”是编写异常处理代码的好地方。
答案 1 :(得分:2)
听听Brann的说法,否则你可能会在thedailywtf.com上结束: - )
将它留给全局错误处理程序会给你带来各种各样的痛苦。确保您的应用程序中的任何例外都在处理处理 - 这是您有权决定如何处理它的正确信息。