2009-06-28 3 views
0

Ich versuche, ArcFM mit meinem ArcGIS-Projekt zu verwenden, und ich habe einen Fehler festgestellt. Wenn mein Hauptthread mit dem Attribut [STAThread] markiert ist, hängt das Programm beim Beenden mit der OS Loader Lock-Ausnahme. Wenn ich dieses Attribut entferne, endet das Programm einwandfrei.
Der folgende Code hängtmit STAThread für ArcFM-Lizenz

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

Wer hier zuvor gesehen haben? Gibt es etwas, was ich falsch mache?
Ich dachte, ich muss auf STAThread ausführen, da sonst alle meine COM-Aufrufe zu einem anderen Thread von der Haupt-Marshalled werden.

Antwort

0

meinen Fehler gefunden -
Das wird gut funktionieren:

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

Es gibt immer noch einen kleinen Fehler ist - Diese funktioniert nicht:

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

Obwohl dies keine wirkliche usecase ist - nur nach einer Lizenz suchen, ohne sie zu bekommen.

In meinem „echten“ Code rufe ich die Initialize und schließlich Shutdown, aber ich habe die LoaderLock Ausnahme, weil ich die mmAppInitialize hinunter nach dem aoAppInitialize wurde Schließung. Nach dem Umschalten der Bestellung wurde das Programm ordnungsgemäß beendet.