在ArcFM许可证上使用STAThread

时间:2009-06-28 06:36:09

标签: c# multithreading com arcgis

我正在尝试将ArcFM用于我的ArcGIS项目,并且我注意到了一个错误。 如果我的主线程标有[STAThread]属性,程序将在退出时挂起OS Loader Lock异常。当我删除该属性时,程序结束就好了 以下代码挂起

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

以前有人见过吗?有什么我做错了吗? 我想我必须在STAThread上运行,否则我的所有COM调用都将被编组到与main不同的线程中。

1 个答案:

答案 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。切换订单后,程序正常终止。