Skip to content

Commit 398ab3e

Browse files
committed
fixed memory leak with sinks
1 parent fafb764 commit 398ab3e

File tree

1 file changed

+12
-1
lines changed

1 file changed

+12
-1
lines changed

RetailCoder.VBE/App.cs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,9 @@ public void Startup()
153153
#region sink handlers. todo: move to another class
154154
async void sink_ProjectRemoved(object sender, DispatcherEventArgs<VBProject> e)
155155
{
156-
_vbe.Events.ReferencesEvents[e.Item].ItemAdded -= ReferencesEvents_ItemAdded;
156+
var sink = (VBProjectsEventsSink)sender;
157+
_componentsEventSinks.Remove(sink);
158+
_referencesEventsSinks.Remove(sink);
157159
_parser.State.RemoveProject(e.Item);
158160

159161
Debug.WriteLine(string.Format("Project '{0}' was removed.", e.Item.Name));
@@ -167,8 +169,15 @@ async void sink_ProjectRemoved(object sender, DispatcherEventArgs<VBProject> e)
167169
}
168170
}
169171

172+
private readonly IDictionary<VBProjectsEventsSink, VBComponentsEventsSink> _componentsEventSinks =
173+
new Dictionary<VBProjectsEventsSink, VBComponentsEventsSink>();
174+
175+
private readonly IDictionary<VBProjectsEventsSink, ReferencesEventsSink> _referencesEventsSinks =
176+
new Dictionary<VBProjectsEventsSink, ReferencesEventsSink>();
177+
170178
async void sink_ProjectAdded(object sender, DispatcherEventArgs<VBProject> e)
171179
{
180+
var sink = (VBProjectsEventsSink)sender;
172181
_parser.State.AddProject(e.Item);
173182

174183
if (!_parser.State.AllDeclarations.Any())
@@ -193,10 +202,12 @@ async void sink_ProjectAdded(object sender, DispatcherEventArgs<VBProject> e)
193202
componentsSink.ComponentRemoved += sink_ComponentRemoved;
194203
componentsSink.ComponentRenamed += sink_ComponentRenamed;
195204
componentsSink.ComponentSelected += sink_ComponentSelected;
205+
_componentsEventSinks.Add(sink, componentsSink);
196206

197207
var referencesSink = new ReferencesEventsSink();
198208
referencesSink.ReferenceAdded += referencesSink_ReferenceAdded;
199209
referencesSink.ReferenceRemoved += referencesSink_ReferenceRemoved;
210+
_referencesEventsSinks.Add(sink, referencesSink);
200211

201212
int cookie;
202213
connectionPoint.Advise(componentsSink, out cookie);

0 commit comments

Comments
 (0)