AE中如何解除鎖定的資源文件


1、說明

在使用ArcGIS桌面產品的時候,有時會碰到這樣的情況:同時在ArcCatalogArcMap中瀏覽圖層數據,然后在ArcMapremove掉圖層,再回到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);

}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM