直接Layers.Remove(layer) 后,无法删除相应的图层文件,在浏览器中删除会提示当前文件被其它程序使用,无法删除
只有一种可能,那就是在Layers中移除之后还被其它东东引用,所以对象没有释放
研究了一下,放出来与大家share
MO2.GeoDataset gdsShare = null;
ESRI.MapObjects2.Core.MapLayer ml = new ESRI.MapObjects2.Core.MapLayer();
MO2.DataConnection dc = new ESRI.MapObjects2.Core.DataConnection();
dc.Database = @"D:/Data/USA";
if (dc.Connect())
{
ml.GeoDataset = gdsShare = dc.FindGeoDataset("CAPITALS");
axMap1.Layers.Add(ml);
}
ESRI.MapObjects2.Core.MapLayer ml2 = ml;
MO2.TableDesc td = new ESRI.MapObjects2.Core.TableDesc();
td.FieldCount = 1;
td.set_FieldType(0, ESRI.MapObjects2.Core.FieldTypeConstants.moBoolean);
gdsShare = dc.AddGeoDataset("DD", ESRI.MapObjects2.Core.ShapeTypeConstants.moShapeTypePoint, td, false, false);
//运行这行后,d:/data/usa/capitals.dbf 不能删除
axMap1.Layers.Clear();
//运行这行后,d:/data/usa/capitals.dbf可以被删除,虽然这个是 ml2 对象的 geodataset
//这里的gdsShare 只是为了替换原来的东东,因为直接设为 null 会有exception
ml2.GeoDataset = gdsShare;
//这一行其实没什么用
ml = null;