Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#中是否有方法捕获控件/窗体中的所有异常?_C#_Exception Handling - Fatal编程技术网

C#中是否有方法捕获控件/窗体中的所有异常?

C#中是否有方法捕获控件/窗体中的所有异常?,c#,exception-handling,C#,Exception Handling,我希望对从控件内部或驻留在当前线程中的窗体抛出的异常使用类似于“全面捕获”的功能,但不必使用整个线程的应用程序.ThreadException 为什么??因为我想保持异常处理模块化 所有可能导致问题的代码都在当前线程中运行的表单(DummyForm)中运行。我希望能够将所有这些异常都封装在其他异常(DummyFormException)中,该异常会将该表单标识为异常的原因,这样,如果该异常进入Application.ThreadException,我就可以知道清理涉及关闭DummyForm 在我

我希望对从控件内部或驻留在当前线程中的窗体抛出的异常使用类似于“全面捕获”的功能,但不必使用整个线程的
应用程序.ThreadException

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

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

在我看来,备选方案是:

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


有没有什么方法可以在不使用多线程的情况下做到这一点?我不愿意这样做,仅仅为了处理错误,这似乎是一种浪费。还是我完全错了?

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

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

错误处理的全部要点是在程序遇到错误时更改程序行为。这意味着您必须在该位置编写特定的代码,并且不能像您希望的那样将所有内容都放在一个位置

然而,也许你只需要一个助手方法来记录东西等等


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

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


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

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

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

错误处理的全部要点是在程序遇到错误时更改程序行为。这意味着您必须在该位置编写特定的代码,并且不能像您希望的那样将所有内容都放在一个位置

然而,也许你只需要一个助手方法来记录东西等等


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

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


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

请听Brann的话,否则您可能会访问Dailywtf.com:-)


将其留给全局错误处理程序将给您带来各种痛苦。确保应用程序中的任何异常都是在源位置处理的,这是您拥有正确信息来决定如何处理的地方。

请听Brann的话,否则您可能会访问Dailywtf.com:-)


将其留给全局错误处理程序将给您带来各种痛苦。确保应用程序中的任何异常都是在源位置处理的,这是您拥有正确信息来决定如何处理的地方。

@scraimer:嗯,有一根魔杖(例如ThreadException、UnhandledDomainException)。但有一个角色是捕捉意外的异常。如果您希望某个地方出现异常,那么应该在那里编写异常处理代码,而不是在全局处理程序中@史克莱默:嗯,有一个魔杖(比如线程异常,未处理的内存异常)。但有一个角色是捕捉意外的异常。如果您希望某个地方出现异常,那么应该在那里编写异常处理代码,而不是在全局处理程序中!嗯,全局捕获意外异常仍然是个好主意。嗯,全局捕获意外异常仍然是个好主意。