2009-06-28 23 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。切换订单后,程序正常终止。