private async void TaskSchedulerOnUnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs args) { var exceptionStackTrace = args.Exception.StackTrace; var exceptionHashCode = string.IsNullOrEmpty(exceptionStackTrace) ? args.Exception.GetHashCode().ToString() : exceptionStackTrace.GetHashCode().ToString(); await ExceptionReportService.Handle(args.Exception.GetType().ToString(), args.Exception.Message, exceptionStackTrace, args.Exception.InnerException.GetType().ToString(), exceptionHashCode); }
private async void OnUnhandledException(object sender, UnhandledExceptionEventArgs args) { var exceptionStackTrace = string.Empty; try { exceptionStackTrace = args.Exception.StackTrace + ""; } // ReSharper disable once EmptyGeneralCatchClause catch { } var exceptionMessage = args.Message; var exceptionType = string.Empty; var innerExceptionType = string.Empty; var exceptionHashCode = string.Empty; if (args.Exception != null) { // Tasks will throw a canceled exception if they get canceled // We don't care, but avoid closing the app if (args.Exception.GetType() == typeof(TaskCanceledException)) { args.Handled = true; return; } if (args.Exception.GetType() == typeof(OperationCanceledException)) { args.Handled = true; return; } if (args.Exception.GetType() == typeof(FileNotFoundException)) { args.Handled = true; return; } // Temporary Workaround for WP10 if (args.Exception.GetType() == typeof(ArgumentException)) { args.Handled = true; return; } if (args.Exception.GetType() == typeof(ResponseError)) { args.Handled = true; ResponseErrorHandlerService.HandleException((ResponseError)args.Exception); return; } // 0x8000000B, E_BOUNDS, System.Exception, OutOfBoundsException if ((uint)args.Exception.HResult == 0x80004004) { args.Handled = true; return; } // 0x80072EE7, ERROR_WINHTTP_NAME_NOT_RESOLVED, The server name or address could not be resolved if ((uint)args.Exception.HResult == 0x80072EE7) { args.Handled = true; var resourceLoader = Container.Resolve <IResourceLoader>(); var dialogService = Container.Resolve <DialogService>(); var dialog = new ContentDialog { Title = resourceLoader.GetString("AnErrorHasOccurred"), Content = new TextBlock { Text = resourceLoader.GetString("ServerNameOrAddressCouldNotBeResolved"), TextWrapping = TextWrapping.WrapWholeWords, Margin = new Thickness(0, 20, 0, 0) }, PrimaryButtonText = resourceLoader.GetString("OK") }; await dialogService.ShowAsync(dialog); return; } exceptionType = args.Exception.GetType().ToString(); if (args.Exception.InnerException != null) { innerExceptionType = args.Exception.InnerException.GetType().ToString(); } exceptionHashCode = string.IsNullOrEmpty(exceptionStackTrace) ? args.Exception.GetHashCode().ToString() : exceptionStackTrace.GetHashCode().ToString(); } if (args.Handled) { return; } args.Handled = true; await ExceptionReportService.Handle(exceptionType, exceptionMessage, exceptionStackTrace, innerExceptionType, exceptionHashCode); }