在多线程上下文中卸载单属性域

Unloading Mono domains in multithreaded context

本文关键字:属性 单属性 多线程 上下文 卸载      更新时间:2023-10-16

我有一个多线程应用程序,可以从本机代码激活多个Mono域。每个域都有自己的线程。我使用以下代码激活域:

///Create a new domain.
m_domain = mono_domain_create_appdomain((char*) name.c_str(), NULL);
///Activate the domain.
mono_domain_set(m_domain, 0);
///Register the current thread
mono_thread_attach(m_domain);
///Invoke some code ...
mono_runtime_invoke (m_method, m_objectInstance, NULL, &exception);

但是当我卸载域时,应用程序崩溃

mono_domain_unload(m_domain);

当我在没有线程的情况下执行代码时,应用程序域将正确卸载。

我在mono_domain_unload之前mono_assembly_close调用了函数:

mono_assembly_close(m_assembly);

所以我删除了这个调用,并为卸载代码创建了一个关键部分