使用C# +ArcObject开发,10.2版本,需要循环调用Dissolve 的GP工具
第一个要素可以正确融合并且文件夹里也保存了结果数据,但是第二条要素运行Dissolves时,其一直在后台运行,不出结果也不报错。
采用异步的方式也可以解决问题,但是需要添加函数遍历文件夹是否产生数据,而且判断函数不能写在调用Dissolve工具的函数内,比如A函数调用B函数 ,B函数调用了Dissolve工具,那个判别函数C即不能写进A也不能写进B,对于运行完就想检查文件夹里是否产生数据就比较难受了。
请问该如何解决问题:
代码如下:
/// <summary>
/// 融合要素
/// </summary>
/// <param name="pGeoPolygonLayer"></param>
/// <param name="pPath"></param>
/// <param name="outFeatureClassName"></param>
///
public void FeatureDissolve(IFeatureLayer pGeoPolygonLayer, string pPath, string outFeatureClassName, string filedsName)
{
Geoprocessor gp = new Geoprocessor();
gp.OverwriteOutput = true;
ESRI.ArcGIS.DataManagementTools.Dissolve dissolve = new ESRI.ArcGIS.DataManagementTools.Dissolve();
//Dissolve dissolve = new Dissolve();
dissolve.in_features = pGeoPolygonLayer.FeatureClass;
ESRI.ArcGIS.Geoprocessing.IGpValueTableObject pObject = new ESRI.ArcGIS.Geoprocessing.GpValueTableObjectClass();//对多个字段进行融合添加
pObject.SetColumns(1);
pObject.AddRow(filedsName);
//pObject.AddRow("字段2");
//pObject.AddRow("字段3");
dissolve.dissolve_field = pObject;
dissolve.multi_part = "SINGLE_PART";
dissolve.unsplit_lines = "DISSOLVE_LINES";
dissolve.statistics_fields = "";
dissolve.out_feature_class = pPath + outFeatureClassName + ".shp";
try
{
gp.Execute(dissolve,null);
}
catch (COMException e)
{
string message = "";
for (int i = 0; i < gp.MessageCount; i++)
{
message += gp.GetMessage(i) + "\r\n";
}
MessageBox.Show(message + e.ToString());
}
}