public static void Shutdown() { bool CanClose = true; foreach (KeyValuePair <Assembly, List <IPluginClient> > Entry in LoadedPluginTable) { foreach (IPluginClient Plugin in Entry.Value) { CanClose &= Plugin.CanClose(CanClose); } } if (!CanClose) { return; } foreach (KeyValuePair <Assembly, List <IPluginClient> > Entry in LoadedPluginTable) { foreach (IPluginClient Plugin in Entry.Value) { Plugin.BeginClose(); } } bool IsClosed; do { IsClosed = true; foreach (KeyValuePair <Assembly, List <IPluginClient> > Entry in LoadedPluginTable) { foreach (IPluginClient Plugin in Entry.Value) { IsClosed &= Plugin.IsClosed; } } if (!IsClosed) { Thread.Sleep(100); } }while (!IsClosed); FullCommandList.Clear(); LoadedPluginTable.Clear(); }