Skip to content

Commit 8eb0f9c

Browse files
committed
+ Marshal.ReleaseComObject for VBE window
1 parent eb1cddb commit 8eb0f9c

File tree

2 files changed

+25
-8
lines changed

2 files changed

+25
-8
lines changed

source/AccessCodeLib.Common.VbeUserControlHost/Properties/AssemblyInfo.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,5 @@
3232
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
3333
// indem Sie "*" wie unten gezeigt eingeben:
3434
// [assembly: AssemblyVersion("1.0.*")]
35-
[assembly: AssemblyVersion("1.0.0.0")]
36-
[assembly: AssemblyFileVersion("1.0.0.0")]
35+
[assembly: AssemblyVersion("1.0.1.0")]
36+
[assembly: AssemblyFileVersion("1.0.1.0")]

source/AccessCodeLib.Common.VbeUserControlHost/VbeUserControl.cs

+23-6
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ namespace AccessCodeLib.Common.VBIDETools
1010
public class VbeUserControl<TControl> : IDisposable
1111
{
1212
private readonly TControl _control;
13-
private readonly Window _vbeWindow;
13+
private Window _vbeWindow;
1414

1515
public VbeUserControl(AddIn addIn, string caption, string positionGuid,
1616
TControl controlToHost, bool visible = true,
17-
string VbideUserControlHostProgId = VbeUserControlHostSettings.ProgId)
17+
string vbideUserControlHostProgId = VbeUserControlHostSettings.ProgId)
1818
{
1919
object docObj = null;
20-
_vbeWindow = addIn.VBE.Windows.CreateToolWindow(addIn, VbideUserControlHostProgId,
20+
_vbeWindow = addIn.VBE.Windows.CreateToolWindow(addIn, vbideUserControlHostProgId,
2121
caption, positionGuid, ref docObj);
2222
_vbeWindow.Visible = true;
2323

@@ -88,16 +88,33 @@ protected virtual void Dispose(bool disposing)
8888
{
8989
DisposeManagedResources();
9090
}
91+
DisposeUnmanagedResources();
9192
_disposed = true;
9293
}
9394

9495
private void DisposeManagedResources()
9596
{
96-
try
97+
if (_control is IDisposable disposableControl)
98+
{
99+
disposableControl.Dispose();
100+
}
101+
}
102+
103+
private void DisposeUnmanagedResources()
104+
{
105+
if (_vbeWindow != null)
97106
{
98-
_vbeWindow.Close();
107+
try
108+
{
109+
_vbeWindow.Close();
110+
}
111+
catch { /* ignore */ }
112+
finally
113+
{
114+
Marshal.ReleaseComObject(_vbeWindow);
115+
_vbeWindow = null;
116+
}
99117
}
100-
catch { /* ignore */ }
101118
}
102119

103120
public void Dispose()

0 commit comments

Comments
 (0)