@@ -10,14 +10,14 @@ namespace AccessCodeLib.Common.VBIDETools
10
10
public class VbeUserControl < TControl > : IDisposable
11
11
{
12
12
private readonly TControl _control ;
13
- private readonly Window _vbeWindow ;
13
+ private Window _vbeWindow ;
14
14
15
15
public VbeUserControl ( AddIn addIn , string caption , string positionGuid ,
16
16
TControl controlToHost , bool visible = true ,
17
- string VbideUserControlHostProgId = VbeUserControlHostSettings . ProgId )
17
+ string vbideUserControlHostProgId = VbeUserControlHostSettings . ProgId )
18
18
{
19
19
object docObj = null ;
20
- _vbeWindow = addIn . VBE . Windows . CreateToolWindow ( addIn , VbideUserControlHostProgId ,
20
+ _vbeWindow = addIn . VBE . Windows . CreateToolWindow ( addIn , vbideUserControlHostProgId ,
21
21
caption , positionGuid , ref docObj ) ;
22
22
_vbeWindow . Visible = true ;
23
23
@@ -88,16 +88,33 @@ protected virtual void Dispose(bool disposing)
88
88
{
89
89
DisposeManagedResources ( ) ;
90
90
}
91
+ DisposeUnmanagedResources ( ) ;
91
92
_disposed = true ;
92
93
}
93
94
94
95
private void DisposeManagedResources ( )
95
96
{
96
- try
97
+ if ( _control is IDisposable disposableControl )
98
+ {
99
+ disposableControl . Dispose ( ) ;
100
+ }
101
+ }
102
+
103
+ private void DisposeUnmanagedResources ( )
104
+ {
105
+ if ( _vbeWindow != null )
97
106
{
98
- _vbeWindow . Close ( ) ;
107
+ try
108
+ {
109
+ _vbeWindow . Close ( ) ;
110
+ }
111
+ catch { /* ignore */ }
112
+ finally
113
+ {
114
+ Marshal . ReleaseComObject ( _vbeWindow ) ;
115
+ _vbeWindow = null ;
116
+ }
99
117
}
100
- catch { /* ignore */ }
101
118
}
102
119
103
120
public void Dispose ( )
0 commit comments