2009-06-28 24 views
0

我正在嘗試在ArcGIS項目中使用ArcFM,並且發現了一個錯誤。 如果我的主線程被標記爲[STAThread]屬性,則程序在OS Loader Lock異常退出時掛起。當我刪除該屬性時,程序結束就好了。
下面的代碼掛在這裏在ArcFM許可證上使用STAThread

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

任何人以前見過嗎?有什麼我做錯了嗎?
我想我必須在STAThread上運行,因爲否則我所有的COM調用將被編組到主要的不同線程。

回答

0

發現我的錯誤 -
這將很好地工作:

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

仍然有一個小bug - 這不起作用:

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

雖然這不是一個真正的用例 - 只是檢查一個許可證,沒有得到它。

在我的「真實」代碼中,我調用Initialize,最後是Shutdown,但我得到LoaderLock異常,因爲我在aoAppInitialize之後關閉了mmAppInitialize。切換訂單後,程序正常終止。