diff --git a/Flow.Launcher.Core/Plugin/PluginAssemblyLoader.cs b/Flow.Launcher.Core/Plugin/PluginAssemblyLoader.cs index e18985fe7..98dbe3080 100644 --- a/Flow.Launcher.Core/Plugin/PluginAssemblyLoader.cs +++ b/Flow.Launcher.Core/Plugin/PluginAssemblyLoader.cs @@ -1,5 +1,6 @@ using Flow.Launcher.Infrastructure; using System; +using System.Collections.Concurrent; using System.Collections.Generic; using System.IO; using System.Linq; @@ -14,14 +15,17 @@ namespace Flow.Launcher.Core.Plugin private readonly AssemblyName assemblyName; - private static readonly List loadedAssembly; + private static readonly ConcurrentDictionary loadedAssembly; static PluginAssemblyLoader() { - loadedAssembly = new List(AppDomain.CurrentDomain.GetAssemblies()); + var currentAssemblies = AppDomain.CurrentDomain.GetAssemblies(); + loadedAssembly = new ConcurrentDictionary( + currentAssemblies.Select(x => new KeyValuePair(x.FullName, null))); + AppDomain.CurrentDomain.AssemblyLoad += (sender, args) => { - loadedAssembly.Add(args.LoadedAssembly); + loadedAssembly[args.LoadedAssembly.FullName] = null; }; } @@ -57,9 +61,7 @@ namespace Flow.Launcher.Core.Plugin internal bool ExistsInReferencedPackage(AssemblyName assemblyName) { - if (loadedAssembly.Any(a => a.FullName == assemblyName.FullName)) - return true; - return false; + return loadedAssembly.ContainsKey(assemblyName.FullName); } } } \ No newline at end of file