ArcGIS Engine处理“COM 组件的调用返回了错误 HRESULT E_FAIL”
在使用AE进行空间查询时,使用下列代码一直报错
ISpatialFilter spatialFilter = new SpatialFilterClass();
spatialFilter.Geometry = polygon;
spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains;
IFeatureCursor cursor = featureClass.Search(spatialFilter, false); ;
IFeature feature = cursor.NextFeature();
while (feature != null)
{
list.Add(feature);
feature = cursor.NextFeature();
}
Marshal.ReleaseComObject(cursor );
由于是对多个图层查询,可是查询到第一个图层有数据,查询其他图层时,就会报错,判断是要素释放的问题。网上找了好多方法,都不管用。查询官网,修改为如下,程序正常运行
ISpatialFilter spatialFilter = new SpatialFilterClass();
spatialFilter.Geometry = polygon;
spatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains;
using (ComReleaser comReleaser = new ComReleaser())
{
IFeatureCursor cursor = featureClass.Search(spatialFilter, false); ;
comReleaser.ManageLifetime(cursor);
IFeature feature = cursor.NextFeature();
while (feature != null)
{
list.Add(feature);
feature = cursor.NextFeature();
}
}
总结:Marshal.ReleaseComObject() 释放可能释放不完全,最好采用官网推荐的方法。
官网帮助地址