说明 在ArcEngine开发中可有时候会有这样需要,在不关闭ArcEngine应用程序的情况下,对图层数据做相应的操作,如将图层数据压缩打包。对这个问题ArcEngine提供了相应的接口控制。
解锁资源文件 解除对资源文件的锁定需要使用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); }
|