我有一个在iOS上运行的Xamarin Forms应用程序,它使用iOS LocationManager来获取用户的位置。
有一些随机的时间,这是不工作的,但不是代码击中我的try / catch异常块,它抛出SIGABRT System. InvalidOperationException。
我想我碰到了下面这篇关于iOS异常封送处理的文章中列出的一个问题,但我不完全理解这篇文章,也没有看到文章中除了使用构建时标志之外的解决方案,但即使这样也很混乱,因为我不知道应该使用哪些标志。
我想我需要将iOS的C#异常转换为带有标志的C#异常,但不确定使用哪个标志。
https://learn.microsoft.com/en-us/xamarin/ios/platform/exception-marshaling
下面是我在iOS中使用的代码块,我想知道如何在出现错误时捕获异常并返回“null”,而不是使应用程序崩溃。
try
{
using (cancellationTokenSource.Token.Register(() => taskCompletionSource.SetCanceled(), useSynchronizationContext: false))
{
// request the current location
locationManager.RequestLocation();
// return the task to the caller
return await taskCompletionSource.Task.ConfigureAwait(continueOnCapturedContext: false);
}
}
catch (Exception)
{
// LOG THE EXCEPTION
// return null so we don't blow up the calling code for now.
return null;
}
finally
{
// remove the attached handler
locationManager.LocationsUpdated -= handler;
locationManager.Dispose();
}
字符串
下面是它发送给我的堆栈跟踪。
TaskCompletionSource`1[TResult].SetCanceled()LocationService+<>c__DisplayClass9_0.b__1()<.cctor>b__26_0(System.Object obj)CancellationCallbackInfo.ExecutionContextCallback(System.Object obj)ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext,System.Threading.ContextCallback callback,System.Object state,System.Boolean BullaveSyncCtx)ExecutionContext.Run(System.Threading.ExecutionContext executionContext,System.Threading.ContextCallback回调,System.Object状态,系统.布尔值(System.Boolean)执行上下文.运行(System.Threading.ExecutionContext executionContext,System.Threading.ContextCallback回调,System.Object state)CancellationCallbackInfo.ExecuteCallback()CancellationTokenSource.CancellationCallbackCoreWork(System.Threading.CancellationCallbackCoreWorkArguments args)CancellationTokenSource.ExecuteCallbackHandlers(System.Boolean throwOnFirstException)
CancellationTokenSource.ExecuteCallbackHandlers(System.Boolean throwOnFirstException)CancellationTokenSource.NotifyCancellation(System.Boolean throwOnFirstException)CancellationTokenSource.TimerCallbackLogic(System.Object obj)Timer+ TimerCB(System.Object o)IThreadPoolWorkItem.ExecuteWorkItem()ThreadPoolWorkQueue.Dispatch()
在我的iOS AppDelegate.cs中,我有AppDomain.CurrentDomain.UnhandledException事件处理程序,但在上面的代码中也没有命中。
记录异常而不是崩溃应用程序会更好。
1条答案
按热度按时间o75abkj41#
AppDomain.CurrentDomain.UnhandledException
未被调用的问题显然是bug。Bug项目中提到了一个解决方法,可以调用该事件:
字符串
YMMV.