From fe8bc60155556e58771481602cb109e54fc9447c Mon Sep 17 00:00:00 2001 From: Kester Maddock Date: Thu, 12 Mar 2026 10:41:33 +1300 Subject: [PATCH] Fix an InvalidOperationException when WeakEventTable.Purge is called with EnableWeakEventMemoryImprovements enabled --- .../src/WindowsBase/System/Windows/WeakEventManager.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/Microsoft.DotNet.Wpf/src/WindowsBase/System/Windows/WeakEventManager.cs b/src/Microsoft.DotNet.Wpf/src/WindowsBase/System/Windows/WeakEventManager.cs index 12764610e41..4a53d910f73 100644 --- a/src/Microsoft.DotNet.Wpf/src/WindowsBase/System/Windows/WeakEventManager.cs +++ b/src/Microsoft.DotNet.Wpf/src/WindowsBase/System/Windows/WeakEventManager.cs @@ -404,6 +404,13 @@ protected virtual bool Purge(object source, object data, bool purgeAll) if (ListenerList.PrepareForWriting(ref list) && source != null) { + // WeakEventTable.Purge is iterating through Table, Table[this, source] = list will invalidate the enumerator. + // Purge the list next time. + if (BaseAppContextSwitches.EnableWeakEventMemoryImprovements) + { + return true; + } + Table[this, source] = list; }