/// <summary> /// Show an error dialog for the user. /// </summary> /// <param name="exception"> /// The exception. /// </param> private void ShowError(object exception) { try { IWindowManager windowManager = IoC.Get <IWindowManager>(); IErrorService errorService = IoC.Get <IErrorService>(); if (windowManager != null) { ErrorViewModel errorView = new ErrorViewModel(errorService); GeneralApplicationException applicationException = null; if (exception.GetType() == typeof(GeneralApplicationException)) { applicationException = exception as GeneralApplicationException; if (applicationException != null) { string details = string.Format( "{0}{1}{2}{3}{4}", applicationException.Error, Environment.NewLine, applicationException.Solution, Environment.NewLine, applicationException.ActualException != null ? applicationException.ActualException.ToString() : "No additional exception information available."); errorView.ErrorMessage = applicationException.Error; errorView.Solution = applicationException.Solution; errorView.Details = details; } } else { errorView.Details = exception.ToString(); } try { windowManager.ShowDialogAsync(errorView); } catch (Exception) { if (applicationException != null) { MessageBox.Show(applicationException.Error + Environment.NewLine + Environment.NewLine + applicationException.Solution, "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } } } catch (Exception) { MessageBox.Show("An Unknown Error has occurred. \n\n Exception:" + exception, "Unhandled Exception", MessageBoxButton.OK, MessageBoxImage.Error); } }
/// <summary> /// Non-UI Thread exception handler. /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="e"> /// The UnhandledExceptionEventArgs. /// </param> private void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e) { Execute.BeginOnUIThread( () => { if (e.ExceptionObject.GetType() == typeof(FileNotFoundException)) { GeneralApplicationException exception = new GeneralApplicationException( "A file appears to be missing.", "Try re-installing Microsoft .NET 6 Desktop Runtime", (Exception)e.ExceptionObject); this.ShowError(exception); } else { this.ShowError(e.ExceptionObject); } }); }
/// <summary> /// Handle unhandled exceptions. UI thread only. /// </summary> /// <param name="sender"> /// The sender. /// </param> /// <param name="e"> /// The DispatcherUnhandledExceptionEventArgs. /// </param> private void Dispatcher_UnhandledException( object sender, System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e) { if (e.Exception.GetType() == typeof(FileNotFoundException)) { GeneralApplicationException exception = new GeneralApplicationException("A file appears to be missing.", "Try re-installing Microsoft .NET 6 Desktop Runtime", e.Exception); this.ShowError(exception); } else if (e.Exception.GetType() == typeof(GeneralApplicationException)) { this.ShowError(e.Exception); } else if (e.Exception.InnerException != null && e.Exception.InnerException.GetType() == typeof(GeneralApplicationException)) { this.ShowError(e.Exception.InnerException); } else { this.ShowError(e.Exception); } e.Handled = true; }