【发布时间】: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