2011-01-30 99 views

回答

0

这是正常行为。也许你想捕捉异常来阻止应用程序退出。

1

是的,这是正常的,你可以看到这个类似的question了解更多细节。

1

这是来自v2.0的CLR的正常行为。这里是一个MSDN的帖子。为避免终止进程,您可以使用类似这样的东西

<legacyUnhandledExceptionPolicy enabled="1"/> 

这是不可取的。

4

您的预期行为曾经是1.1中的行为。通常认为这是一个坏主意。当任何线程中有未处理的异常时,您的进程可能会处于不一致的状态。对共享数据的更新可能会部分应用,等等。运行时没有安全地处理这种情况的信息,甚至不知道如何处理这种情况,所以它的选择将等于终止线程并让程序进入一个奇怪的状态。这可能导致资源泄漏,数据中断,数据损坏等。通过终止给定未处理异常的流程,您确切知道发生了什么,流程结束。

7

.NET应用程序的默认行为是每当发生未处理的异常时退出。当一个异常处理未得到处理时,程序处于一个未知的,可能不稳定的状态。仅仅因为它发生在后台线程中并不意味着错误不会影响程序的其余部分。在这种情况下,运行时最谨慎的方法是转储程序。

您可能会考虑AppDomain.CurrentDomain.UnhandledException,这将允许您捕获未处理的异常并作出相应的反应。更好的解决方案是用try...catch包装你的线程处理器。但只有它能够处理那些它知道如何处理的例外。这样做:

void MyThreadProc() 
{ 
    try 
    { 
     // ... 
    } 
    catch 
    { 
     // handle all exceptions 
     // This is a BAD idea 
    } 
} 

是一个非常糟糕的主意,因为它可以掩盖您确实希望传播到主程序的异常。

相关问题