我希望在发出未处理的异常后阻止我的应用关闭。
我是用Xamarin和MonoMac做的,但我想我可以将Objective-C的答案翻译成C#。
当异常发生并且没有被捕获时,我会注册未处理的异常事件:
AppDomain.CurrentDomain.UnhandledException += HandleUnhandledException;
并记录下来:
static void HandleUnhandledException(object sender, UnhandledExceptionEventArgs e)
{
//Log the exception...
}
但是,当发生异常时,会执行HandleUnhandledException并退出事件循环:
NSApplication.Main(args);
所以我的应用程序结束了。我怎么能避免这个?我应该在哪里放置try-catch块?
答案 0 :(得分:3)
这就是xamarin开发者中心所说的:
"您可以向AppDomain.CurrentDomain.UnhandledException
事件添加事件处理程序,当未处理的托管异常发生时,您会收到通知(请注意,只要您从事件中返回,应用就会退出处理程序,无论你做什么,所以几乎唯一的目的是收集诊断信息。它也只会捕获托管异常,而不是本机崩溃,这是退出应用程序的另一个原因。)"
所以,显然,你可以添加一个全局try catch块,但这只是告诉你托管异常,app会在try catch结束时退出。所以它不能完全满足你的目的。
答案 1 :(得分:0)
好吧,我知道这有点老了,但是我也很挣扎了好几个月,因为我的应用程序在没有任何堆栈跟踪的情况下崩溃了......但是! ...我经过多次尝试后想出来,并且在这里和那里捕获,您可以将以下内容放入AppDelegate.cs类的构造函数中:
AppDomain.CurrentDomain.UnhandledException += (object sender, UnhandledExceptionEventArgs e) => {
Exception GivenException = (Exception) e.ExceptionObject;
Console.WriteLine( GivenException.Message);
Console.WriteLine( GivenException.StackTrace);
Console.WriteLine("Runtime terminating: {0}", e.IsTerminating);
};
这不会避免应用程序终止,但至少你会确切地知道在哪里寻找并解决问题。