我正在尝试将ArcFM用于我的ArcGIS项目,并且我注意到了一个错误。
如果我的主线程标有[STAThread]
属性,程序将在退出时挂起OS Loader Lock异常。当我删除该属性时,程序结束就好了
以下代码挂起
[STAThread]
private static void Main()
{
MMAppInitialize mmAppInitialize = new MMAppInitialize();
mmAppInitialize.IsProductCodeAvailable(mmLicensedProductCode.mmLPDesigner);
}
以前有人见过吗?有什么我做错了吗? 我想我必须在STAThread上运行,否则我的所有COM调用都将被编组到与main不同的线程中。
答案 0 :(得分:0)
发现我的错误 -
这样可以正常工作:
[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异常,因为我在aoAppInitialize之后关闭了mmAppInitialize。切换订单后,程序正常终止。