【问题标题】:MonoTouch - AppDomain.CurrentDomain.UnhandledException hangsMonoTouch - AppDomain.CurrentDomain.UnhandledException 挂起
【发布时间】:2012-12-24 22:13:03
【问题描述】:

我有一个在 Main.cs 中运行良好的全局异常处理程序,但在发现错误后,我的应用程序不存在,而只是挂起。我尝试了 Environment.Exit,退出选择器,返回,重新抛出异常 - 所有这些仍然导致挂起。有没有办法让应用程序终止?异常被抛出主线程之外。

AppDomain.CurrentDomain.UnhandledException += delegate(object sender, UnhandledExceptionEventArgs e)
        {
            var ex = (Exception)e.ExceptionObject;

            if (!DidReportError)
            {
                var error = ex.GetInnerErrorMessage ();
                Console.WriteLine ("Caught in Main.cs \n\n" + error);
                DidReportError = true;
            }
        };

【问题讨论】:

  • 你是如何创建你的后台线程的?您只是使用new Thread() 而没有将IsBackground 设置为true?
  • 我正在使用 ThreadPool.QueueUserWorkItem 这不是最好的方法吗?
  • 不,应该退出就好了。我不明白为什么上面的代码会挂起。你的意思是它没有崩溃? MonoTouch 将防止后台线程上的异常使您的应用崩溃。
  • 有意思,有没有办法强制退出?基本上异常发生在一个单独的线程上,未处理的异常处理程序捕获它,我不是要关闭的应用程序,但此时它只是阻塞
  • 如果您以任何方式强制退出,Apple 会拒绝您的应用程序。解决引发异常的问题会更明智吗?除了调试/故障排除之外,您不需要像这样的全局异常处理程序。

标签: multithreading exception-handling xamarin.ios


【解决方案1】:

你需要弄清楚应用挂起的原因,最简单的方法是在挂起后创建崩溃报告1:

  • 按住开/关按钮,直到出现“滑动关机”。
  • 松开开/关按钮。
  • 按住主页按钮。
  • 几秒钟后,应用将终止,并生成崩溃报告(应用的异常代码将为 0xdeadfa11)。

现在您将在 Xcode 的 Organizer 中找到崩溃报告(详细说明如何找到它here)。

1http://rolfkvinge.blogspot.com.es/2012/05/monotouch-debugging-tips.html

【讨论】:

  • 感谢 Rolf,虽然这并不是我想要解决的问题。基本上我有一个 UnhandledException 捕捉器来捕捉客户发现的错误。但是一旦我记录了我的错误,我希望应用程序退出,而不是永远为客户挂起。知道我该怎么做吗?
  • @GregR:一旦您退出 UnhandledException 处理程序,应用程序应自行中止。
猜你喜欢
  • 1970-01-01
  • 2014-06-02
  • 2013-04-27
  • 2017-03-30
  • 1970-01-01
  • 1970-01-01
  • 2011-01-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多