【问题标题】:using STAThread on ArcFM license在 ArcFM 许可证上使用 STAThread
【发布时间】:2010-11-06 11:10:43
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# multithreading com arcgis


    【解决方案1】:

    找到我的错误 -
    这会正常工作:

    [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。切换顺序后,程序正常终止。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-24
      • 2016-01-29
      • 2023-04-01
      • 1970-01-01
      • 2016-11-24
      • 2017-04-17
      • 2013-08-29
      • 2018-10-09
      相关资源
      最近更新 更多