public EffectPlugin ReplacePlugin(string pluginPath, MixerChannel channel, Action <Exception> onError, EffectPlugin oldPlugin) { int idx = Plugins.IndexOf(oldPlugin ?? throw new ArgumentNullException(nameof(oldPlugin))); try { EffectPlugin plugin = new EffectPlugin(pluginPath) { EffectMix = oldPlugin.EffectMix }; RemovePlugin(oldPlugin); lock (((ICollection)Plugins).SyncRoot) { Plugins.Insert(idx, plugin); } return(plugin); } catch (Exception e) { onError?.Invoke(e); return(null); } }
public void RemovePlugin(EffectPlugin plugin) { lock (((ICollection)Plugins).SyncRoot) { Plugins.Remove(plugin); } plugin.Dispose(); }
public EffectPlugin AddPlugin(string pluginPath, MixerChannel channel, Action <Exception> onError) { try { EffectPlugin plugin = new EffectPlugin(pluginPath); lock (((ICollection)Plugins).SyncRoot) { Plugins.Add(plugin); } return(plugin); } catch (Exception e) { onError?.Invoke(e); return(null); } }