0

ArcGISプロジェクトでArcFMを使用しようとしていますが、バグに気づきました。メインスレッドが[STAThread]属性でマークされている場合、プログラムはOSローダーロック例外で終了時にハングします。その属性を削除すると、プログラムは正常に終了します。
次のコードがハングします

[STAThread]
private static void Main()
{
    MMAppInitialize mmAppInitialize = new MMAppInitialize();
    mmAppInitialize.IsProductCodeAvailable(mmLicensedProductCode.mmLPDesigner);
}

ここの誰かが以前にそれを見たことがありますか?私が間違っていることはありますか?
STAThreadで実行する必要があると考えました。そうしないと、すべてのCOM呼び出しがメインとは異なるスレッドにマーシャリングされるためです。

4

1 に答える 1

0

私のバグを見つけました-
これはうまくいきます:

[STAThread]
private static void Main()
{
    MMAppInitialize mmAppInitialize = new MMAppInitialize();
    mmAppInitialize.IsProductCodeAvailable(mmLicensedProductCode.mmLPDesigner);
    mmAppInitialize.Initialize(mmLicensedProductCode.mmLPDesigner);
    mmAppInitialize.Shutdown();
}

まだ小さなバグがあります-これは機能しません:

[STAThread]
private static void Main()
{
    MMAppInitialize mmAppInitialize = new MMAppInitialize();
    mmAppInitialize.IsProductCodeAvailable(mmLicensedProductCode.mmLPDesigner);
    mmAppInitialize.Shutdown();
}

これは実際のユースケースではありませんが、ライセンスを取得せずにチェックするだけです。

私の「実際の」コードではInitialize、最後Shutdownにを呼び出していましたが、aoAppInitializeの後にmmAppInitializeをシャットダウンしていたため、LoaderLock例外が発生しました。順序を切り替えた後、プログラムは正常に終了しました。

于 2009-06-29T06:33:05.643 に答える