【问题标题】:Disposing Of An Instance from Activator.CreateInstance()从 Activator.CreateInstance() 处理实例
【发布时间】:2021-11-13 19:35:45
【问题描述】:

我有一个带有插件系统的软件,它使用 Assembly.Load() + Activator.CreateInstance() 加载 DLL。我遇到的问题是插件使进程保持打开状态,例如,如果我关闭主窗口,进程仍然在后台保持打开状态并且无法正确关闭。

我的问题是,是否可以删除/卸载由 Activator.CreateInstance() 创建的实例?我尝试将对象设置为 null 并按照另一个问题中的建议调用 GC.Collect() ,但这无济于事......

 async public void AddServerModule(Assembly module)
 {
    Type type = module.GetType("ModularModule.ModularModule");
    object instance = Activator.CreateInstance(type, new object[] { this });
    ...
 }

【问题讨论】:

  • IDisposable 那么你可以使用using 块,如果不是为什么不呢?
  • 您是否建议让插件使用IDisposable?
  • if(instance is IDisposable d) d.Dispose();(+ 异常处理等)。否则,强制type 实现一些接口,该接口扩展IDisposable
  • 我从未听说过加载程序集保持进程运行。当这发生在我身上时,是因为我启动了一个线程,没有将其标记为后台线程并让它运行。这个程序集有什么特别时髦的地方吗?
  • @JeremyLakeman 成功了,谢谢。

标签: c# .net reflection


【解决方案1】:

我通过使插件成为一次性插件解决了这个问题,然后在 Dispose() 方法中调用 Close()。

【讨论】:

  • 我建议改用using 块,这样可以正确处理异常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-25
  • 2011-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多