2

我的应用程序中有以下代码在未处理的异常后运行:

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
        {
            var exception = e.ExceptionObject as Exception;
            if (exception != null) MessageBox.Show(exception.Message + " - " + exception.StackTrace);
        }

但即使我捕捉到未处理的异常,我的 Windows 移动应用程序也会关闭。当我捕获未处理的异常时如何防止关闭应用程序。我从不想关闭我的应用程序。我想在这种情况下打开登录表单或其他任何不关闭应用程序的东西。

所以我想要的是防止关闭应用程序出现未处理的异常,例如网络关闭,......

我不能在每个代码中都使用 try catch ....

知道如何在网络关闭或任何其他未处理的异常时防止关闭应用程序吗?

4

5 回答 5

6

你没有。当您收到 AppDomain 未处理的异常时,您的应用程序不再处于稳定状态。你究竟会恢复到哪里?当你到了那个地步,你唯一的选择,有充分的理由,就是退出。您可以合理地安排自己再次运行以确保应用程序恢复运行,但更好的想法是实际在其源处处理异常并防止它成为 UnhandledException。

于 2011-10-19T13:22:41.553 回答
4

在您的 app.config 中添加以下元素

<runtime>
  <!-- the following setting prevents the host from closing when an unhandled exception is thrown -->
  <legacyUnhandledExceptionPolicy enabled="1" />
</runtime>
于 2013-03-11T21:12:12.333 回答
2

您可以,并且您应该try...catch在可能发生异常的每种情况下使用和处理异常。(在像 Java 这样的语言中,你甚至不能编译你的代码,直到你捕捉到被调用函数可能抛出的每个异常,或者明确声明这个特定函数不会捕捉它,所以调用它的那个应该这样做。)

如果您想尽量减少使用try...catch某些不良情况的情况,可以通过测试是否满足必要条件来防止,这样您甚至不会调用以抛出特定异常而闻名的函数。喜欢打电话

if (myByteArray != null)
{
    myIPAddress = new IPAddress(myByteArray);
}

因为这样IPAddress构造函数不会抛出ArgumentNullException.

但是在大多数情况下,这是无法做到的,尤其是在联网的情况下,因为您无法预测在事务处理过程中电缆是否会被切断、信号会丢失、数据库服务器会崩溃等等。 . 因此,您应该try...catch每次连接到网络或向连接发送数据或从连接接收数据。

于 2011-10-19T14:35:49.217 回答
1

AppDomain.CurrentDomain.UnhandledException触发任何线程上的任何未处理异常,但自 CLR 2.0 起,CLR 会在事件处理程序完成后强制关闭应用程序。但是,您可以通过将以下内容添加到应用程序配置文件来防止关闭:

<configuration>
  <runtime>
    <legacyUnhandledExceptionPolicy enabled="1" />
  </runtime>
</configuration>
于 2015-04-22T06:40:56.640 回答
0

我认为您需要使用Application.ThreadException 当您订阅Application.ThreadException时,未处理的异常不会命中UnhandledException并且应用程序将继续运行。

于 2011-10-18T07:02:07.797 回答