2

ネイティブ コードから複数の 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);

スレッド化せずにコードを実行すると、アプリケーション ドメインが正しくアンロードされます。

4

1 に答える 1

1

mono_domain_unloadの前に、関数mono_assembly_closeを呼び出していました。

mono_assembly_close(m_assembly);

そこで、この呼び出しを削除し、アンロード コード用のクリティカル セクションを作成しました。

于 2012-04-25T08:59:39.993 に答える