アセンブリをロードし、そのアセンブリからクラスのインスタンスを作成する方法を知っているアプリケーションがあります。
Assembly assembly = Assembly.LoadFrom(assembly_name);
foreach (Type t in assembly.GetTypes())
{
if (t.GetInterfaces().Contains(typeof(ISimModuleInterface)))
{
current_loaded_modules[module_name] = Activator.CreateInstance(t) as simulator2k14.ISimModuleInterface;
current_loaded_modules[module_name].OnModuleDeiniting += new simulator2k14.OnDeinitingDelegate(current_loaded_module_OnModuleDeiniting);
current_loaded_modules[module_name].OnModuleIniting += new OnInitingDelegate(mainsim_OnModuleIniting);
current_loaded_modules[module_name].OnModuleExecuteCommand += new OnExecudeCommandDelegate(mainsim_OnModuleExecuteCommand);
break;
}
}
次に、モジュールの初期化の中で、SafeWaitHandle.DangerousGetHandle() を呼び出して、ハードウェアで動作し、イベントを生成する他の関数に渡します。1 つのアセンブリからクラスのインスタンスを 1 つだけ開始するまで、すべてがうまくいきます。単一のアセンブリからクラスの 2 番目のインスタンスをロードすると、最初のインスタンスのイベントが上書きされ、ドライバーからのすべてのイベントが 2 番目のインスタンスにのみ移動するように見えます。
メイン アプリケーションの 2 つのインスタンスをロードし、それぞれにアセンブリからクラスのインスタンスを 1 つだけロードすると、すべて問題なく動作します。
1 つのアセンブリからのクラスの 2 つのインスタンスで問題を解決するにはどうすればよいですか?