AO中弹出GP工具面板时如何预先设置输入参数?如何获取执行的结果信息?

1,AO中弹出GP工具面板时如何预先设置输入参数?以AddRastersToMosaicDataset为例,想预先设置其镶嵌数据集的路径。
2,如何获取GP执行的结果信息?
已邀请:

朱新颖

赞同来自:

【解决办法】:
1,设置IArray,注意IArray不能直接new,而需要通过IGPTool.ParameterInfo 获取,设置好后再将其传人InvokeModal();方法中,具体可以参考下面示例代码:
2,原则上通过InvokeModal返回的IGPMessages参数应该是可以获取结果信息的,但经测试,该参数的返回值为null,那么可以通过Geoprocessor.MessagesCreated事件来获取执行信息。具体可以参考下面示例代码。



//预先设置参数:
             IGPToolCommandHelper2 pToolHelper = new GPToolCommandHelperClass() as IGPToolCommandHelper2;

             string toolboxName = @D:\install_software\ArcGIS 10.3.1\Desktop10.4\ArcToolbox\Toolboxes\Data Management Tools.tbx;
             pToolHelper.SetToolByName(toolboxName, AddRastersToMosaicDataset);

    //Create the messages object and a bool to pass to the InvokeModal method.
    IGPMessages msgs;
    msgs = new GPMessagesClass();
    bool pok = true;
    IArray pArray = pToolHelper.Tool.ParameterInfo;
    
    IGPParameter pGPParameter = pArray.get_Element(0) as IGPParameter;
             IGPDataType pGPDataType= pGPParameter.DataType;
IGPParameterEdit pGPParameterEdit = pGPParameter as IGPParameterEdit;
pGPParameterEdit.Value = pGPDataType.CreateValue(@E:\ZhuXinying\testData\Raster.gdb\testMosaic); //这里只设置了一个参数,设置多个参数也一样
    //Invoke the tool. 
    pToolHelper.InvokeModal(0, pArray, out pok, out msgs);

//获取执行结果,可以将该段代码放在InvokeModal之前执行。
Geoprocessor GP = new Geoprocessor();
GP.MessagesCreated += new EventHandler<MessagesCreatedEventArgs>(GP_MessagesCreated);

void GP_MessagesCreated(object sender, MessagesCreatedEventArgs e)
{
IGPMessages msgs = e.GPMessages;
IGPMessage msg = msgs.GetMessage(msgs.Count - 1);
Console.WriteLine(msg.Description);
}

要回复问题请先登录注册