• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
bobird的学习笔记
博客园    首页    新随笔    联系   管理    订阅  订阅
AE中如何解除锁定的资源文件

1、说明

在使用ArcGIS桌面产品的时候,有时会碰到这样的情况:同时在ArcCatalog和ArcMap中浏览图层数据,然后在ArcMap中remove掉图层,再回到ArcCatalog中删除该图层,却得到该图层被锁的信息。非得关掉ArcMap才能正常删除。同样的情况也会在ArcEngine开发的应用程序中碰到。可有时候会有这样需要,在不关闭ArcEngine应用程序的情况下,对图层数据做相应的操作,如将图层数据压缩打包。对这个问题ArcEngine提供了相应的接口控制,只是我们很少去关注而已。

2、解锁资源文件

解除对资源文件的锁定需要使用IWorkspaceFactoryLockControl接口,默认情况下对资源文件的锁定状态是打开的,可通过如下的方式得知:

ipWsFactoryLock.SchemaLockingEnabled

    解锁资源文件的一般步骤:使用IWorkspaceFactoryLockControl接口关闭资源锁定,然后在使用完AE COM接口后,使用ComRelease释放COM接口即可。示例源码如下:

private void mnuItemUnlockFGDB_Click(object sender, EventArgs e)

{

       IWorkspaceFactory2 ipWsFactory = new FileGDBWorkspaceFactoryClass();

 

         //关闭资源锁定

IWorkspaceFactoryLockControl ipWsFactoryLock;

ipWsFactoryLock = (IWorkspaceFactoryLockControl)ipWsFactory;

if (ipWsFactoryLock.SchemaLockingEnabled)

{

ipWsFactoryLock.DisableSchemaLocking();

}

 

String strConn = "DATABASE=F:\\临时测试\\world.gdb";

IWorkspace ipWorkspace = ipWsFactory.OpenFromString(strConn,0);

 

IFeatureWorkspace ipFtWorkspace = (IFeatureWorkspace)ipWorkspace;

IFeatureDataset ipFtDataset = ipFtWorkspace.OpenFeatureDataset("world");

 

IEnumDataset ipEnumDataset = ipFtDataset.Subsets;

ipEnumDataset.Reset();

IDataset ipDataset = ipEnumDataset.Next();

while (ipDataset!=null)

{

IFeatureClass ipFtClass = (IFeatureClass)ipDataset;

IFeatureLayer ipFtLayer = new FeatureLayerClass();

ipFtLayer.FeatureClass = ipFtClass;

ipFtLayer.Name = ipDataset.Name;

 

                  //对图层做相关操作处理

 

ipDataset = ipEnumDataset.Next();

 

ComReleaser.ReleaseCOMObject(ipFtClass);

ComReleaser.ReleaseCOMObject(ipFtLayer);

}

 

ComReleaser.ReleaseCOMObject(ipWorkspace);

ComReleaser.ReleaseCOMObject(ipFtWorkspace);

ComReleaser.ReleaseCOMObject(ipFtDataset);

ComReleaser.ReleaseCOMObject(ipEnumDataset);

ComReleaser.ReleaseCOMObject(ipDataset);

ComReleaser.ReleaseCOMObject(ipWsFactory);

ComReleaser.ReleaseCOMObject(ipWsFactoryLock);

}

posted on 2013-07-04 12:21  bobird  阅读(6337)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3