0

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

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

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

4

1 回答 1

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();
}

虽然这不是一个真正的用例 - 只是检查许可证,没有得到它。

在我的“真实”代码中,我调用了Initializeand finally Shutdown,但是我得到了LoaderLock 异常,因为我在aoAppInitialize 之后关闭了mmAppInitialize。切换顺序后,程序正常终止。

于 2009-06-29T06:33:05.643 回答