【发布时间】: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