Pergunta

Eu estou tentando usar ArcFM com meu projeto ArcGIS, e tenho notado um erro. Se o meu principal segmento está marcado com o atributo [STAThread], os programa paralisa ao sair com exceção OS Loader Lock. Quando eu remover esse atributo as extremidades programa muito bem.
Os trava código a seguir

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

Alguém aqui já vi isso antes? Existe algo que eu estou fazendo errado?
Eu percebi que eu tenho que correr em STAThread, pois caso contrário todas as minhas invocações COM será comandada a um segmento diferente do principal.

Foi útil?

Solução

Encontrado o meu bug -
Este trabalho será bem:

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

Há ainda um pequeno bug - Isso não funciona:

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

Embora este não é um verdadeiro usecase - apenas a verificação de uma licença, sem consegui-lo.

No meu código "real" Eu estava chamando o Initialize e, finalmente, Shutdown, mas eu tenho a exceção LoaderLock porque eu estava fechando a mmAppInitialize após a aoAppInitialize. Depois de mudar a ordem, o programa terminou corretamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top