From e2887c5508ad693997c82b113acab8fd580bdd3f Mon Sep 17 00:00:00 2001 From: Aparajit Pratap Date: Wed, 17 Jan 2024 23:48:14 -0500 Subject: [PATCH 1/2] skip handling exception if already handled in DynamoCore --- src/DynamoRevit/DynamoRevit.cs | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/src/DynamoRevit/DynamoRevit.cs b/src/DynamoRevit/DynamoRevit.cs index 71aa58d881..6cb93b902c 100644 --- a/src/DynamoRevit/DynamoRevit.cs +++ b/src/DynamoRevit/DynamoRevit.cs @@ -1031,19 +1031,19 @@ public static string GetRevitContext(DynamoRevitCommandData commandData) private static void Dispatcher_UnhandledException( object sender, DispatcherUnhandledExceptionEventArgs args) { - args.Handled = true; - - // only handle a single crash per Dynamo sesh, this should be reset in the initial command + // only handle a single crash per Dynamo session, this should be reset in the initial command if (handledCrash) return; handledCrash = true; - string exceptionMessage = args.Exception.Message; - try { - Dynamo.Logging.Analytics.TrackException(args.Exception, true); + if (!args.Handled) + { + Analytics.TrackException(args.Exception, true); + } + string exceptionMessage = args.Exception.Message; RevitDynamoModel.Logger.LogError("Dynamo Unhandled Exception"); RevitDynamoModel.Logger.LogError(exceptionMessage); @@ -1052,11 +1052,12 @@ private static void Dispatcher_UnhandledException( try { - DynamoModel.IsCrashing = true; - RevitDynamoModel.OnRequestsCrashPrompt( - RevitDynamoModel, - new CrashPromptArgs(args.Exception.Message + "\n\n" + args.Exception.StackTrace)); - RevitDynamoViewModel.Exit(false); // don't allow cancellation + if (!args.Handled) + { + DynamoModel.IsCrashing = true; + RevitDynamoModel.OnRequestsCrashPrompt(new CrashErrorReportArgs(args.Exception)); + RevitDynamoViewModel.Exit(false); // don't allow cancellation + } } catch { } finally From 70507c921b60efc3e87815011fdbfc65596a1c37 Mon Sep 17 00:00:00 2001 From: Aparajit Pratap Date: Thu, 18 Jan 2024 20:04:04 -0500 Subject: [PATCH 2/2] remove dispatcher unhandled exception handler as it's been moved to DynamoCore --- src/DynamoRevit/DynamoRevit.cs | 52 ---------------------------------- 1 file changed, 52 deletions(-) diff --git a/src/DynamoRevit/DynamoRevit.cs b/src/DynamoRevit/DynamoRevit.cs index 487b0c75f0..4ae40c3182 100644 --- a/src/DynamoRevit/DynamoRevit.cs +++ b/src/DynamoRevit/DynamoRevit.cs @@ -696,7 +696,6 @@ private static DynamoView InitializeCoreView(DynamoRevitCommandData commandData) DynamoAppExternalEvent = ExternalEvent.Create(appEventHandler); - dynamoView.Dispatcher.UnhandledException += Dispatcher_UnhandledException; dynamoView.Closed += OnDynamoViewClosed; dynamoView.Loaded += (o, e) => DynamoAppExternalEvent.Raise(); @@ -1019,55 +1018,6 @@ public static string GetRevitContext(DynamoRevitCommandData commandData) #endregion - #region Exception - - /// - /// A method to deal with unhandled exceptions. Executes right before Revit crashes. - /// Dynamo is still valid at this time, but further work may cause corruption. Here, - /// we run the ExitCommand, allowing the user to save all of their work. - /// - /// - /// Info about the exception - private static void Dispatcher_UnhandledException( - object sender, DispatcherUnhandledExceptionEventArgs args) - { - // only handle a single crash per Dynamo session, this should be reset in the initial command - if (handledCrash) - return; - - handledCrash = true; - - try - { - if (!args.Handled) - { - Analytics.TrackException(args.Exception, true); - } - string exceptionMessage = args.Exception.Message; - - RevitDynamoModel.Logger.LogError("Dynamo Unhandled Exception"); - RevitDynamoModel.Logger.LogError(exceptionMessage); - } - catch { } - - try - { - if (!args.Handled) - { - DynamoModel.IsCrashing = true; - RevitDynamoModel.OnRequestsCrashPrompt(new CrashErrorReportArgs(args.Exception)); - RevitDynamoViewModel.Exit(false); // don't allow cancellation - } - } - catch { } - finally - { - args.Handled = true; - DynamoRevitApp.DynamoButtonEnabled = true; - } - } - - #endregion #region Shutdown @@ -1080,7 +1030,6 @@ private static void OnDynamoViewClosed(object sender, EventArgs e) { var view = (DynamoView)sender; - view.Dispatcher.UnhandledException -= Dispatcher_UnhandledException; view.Closed -= OnDynamoViewClosed; DynamoRevitApp.DynamoButtonEnabled = true; @@ -1098,7 +1047,6 @@ private static void OnSplashScreenClosed(object sender, EventArgs e) { var view = (Window)sender; - view.Dispatcher.UnhandledException -= Dispatcher_UnhandledException; view.Closed -= OnSplashScreenClosed; //if the user explicitly closed the splashscreen, then we should let them boot //dynamo back up.