代码之家  ›  专栏  ›  技术社区  ›  Noam Gal

在arcfm许可证上使用stathread

  •  0
  • Noam Gal  · 技术社区  · 15 年前

    我正在尝试将arcfm用于我的arcgis项目,我注意到了一个bug。 如果我的主线程用 [STAThread] 属性,程序在退出时挂起,操作系统加载程序锁定异常。当我删除这个属性时,程序就结束了。
    以下代码挂起

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

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

    1 回复  |  直到 15 年前
        1
  •  0
  •   Noam Gal    15 年前

    发现我的错误
    这样做很好:

    [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异常,因为我在aAppInitialize之后关闭了mmappinitialize。切换顺序后,程序正常终止。