From f99c369fe70bf0332016ab263049603846187357 Mon Sep 17 00:00:00 2001 From: kike-garbo Date: Fri, 16 Aug 2024 19:45:41 +0200 Subject: [PATCH] Is more safe to do manual disposing internally. --- .../UI/UIHostApplication.cs | 21 +++++++++++-------- .../UI/UIHostApplicationConstrained.cs | 5 ++++- .../UI/UIHostApplicationUnconstrained.cs | 2 +- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/src/RhinoInside.Revit.External/UI/UIHostApplication.cs b/src/RhinoInside.Revit.External/UI/UIHostApplication.cs index 6c089b99c..d1c5a1b19 100644 --- a/src/RhinoInside.Revit.External/UI/UIHostApplication.cs +++ b/src/RhinoInside.Revit.External/UI/UIHostApplication.cs @@ -9,7 +9,7 @@ namespace RhinoInside.Revit.External.UI using Autodesk.Revit.ApplicationServices; using External.DB.Extensions; - public abstract class UIHostApplication : IDisposable + public abstract class UIHostApplication { protected internal UIHostApplication(bool disposable) => Disposable = disposable; @@ -17,13 +17,6 @@ public abstract class UIHostApplication : IDisposable #pragma warning disable CA1063 // Implement IDisposable Correctly readonly bool Disposable; protected abstract void Dispose(bool disposing); - void IDisposable.Dispose() - { - if (!Disposable) return; - - Dispose(disposing: true); - GC.SuppressFinalize(this); - } #pragma warning restore CA1063 // Implement IDisposable Correctly #endregion @@ -37,7 +30,17 @@ void IDisposable.Dispose() public abstract UIDocument ActiveUIDocument { get; set; } #region Runtime - internal static UIHostApplication Current; + private static UIHostApplication _Current; + internal static UIHostApplication Current + { + get => _Current; + set + { + if (_Current == value) return; + _Current?.Dispose(true); + _Current = value; + } + } internal static bool StartUp(UIControlledApplication app) { diff --git a/src/RhinoInside.Revit.External/UI/UIHostApplicationConstrained.cs b/src/RhinoInside.Revit.External/UI/UIHostApplicationConstrained.cs index 21bec8dd8..1d81b6e44 100644 --- a/src/RhinoInside.Revit.External/UI/UIHostApplicationConstrained.cs +++ b/src/RhinoInside.Revit.External/UI/UIHostApplicationConstrained.cs @@ -14,9 +14,12 @@ public UIHostApplicationConstrained(UIControlledApplication app, bool disposable { _app = app; + if (!disposable) + { #if REVIT_2023 - _app.SelectionChanged += SelectionChangedHandler; + _app.SelectionChanged += SelectionChangedHandler; #endif + } } protected override void Dispose(bool disposing) { diff --git a/src/RhinoInside.Revit.External/UI/UIHostApplicationUnconstrained.cs b/src/RhinoInside.Revit.External/UI/UIHostApplicationUnconstrained.cs index 01294abb5..3f5d72357 100644 --- a/src/RhinoInside.Revit.External/UI/UIHostApplicationUnconstrained.cs +++ b/src/RhinoInside.Revit.External/UI/UIHostApplicationUnconstrained.cs @@ -36,7 +36,7 @@ protected override void Dispose(bool disposing) _app.SelectionChanged -= SelectionChangedHandler; #endif _app.ViewActivated -= UpdateOpenViewsList; - _app.Dispose(); + //_app.Dispose(); } _app = null;