использование лицензии STAThread на ArcFM - PullRequest
0 голосов
/ 28 июня 2009

Я пытаюсь использовать ArcFM с моим проектом ArcGIS, и я заметил ошибку. Если мой основной поток помечен атрибутом [STAThread], программа зависает при выходе с исключением блокировки загрузчика ОС. Когда я удаляю этот атрибут, программа заканчивается нормально.
Следующий код висит

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

Кто-нибудь здесь видел это раньше? Что-то я делаю не так?
Я решил, что должен работать на STAThread, так как в противном случае все мои вызовы COM будут перенаправляться в другой поток из основного.

1 Ответ

0 голосов
/ 29 июня 2009

Нашел мою ошибку -
Это будет хорошо работать:

[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, но я получил исключение LoaderLock, потому что я выключал mmAppInitialize после aoAppInitialize. После переключения заказа программа завершилась правильно.

...