About the Geoprocessing events listener Sample
[C#]
GPEventHelper.cs
using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.Geodatabase; using ESRI.ArcGIS.Geoprocessing; namespace GeoprocessorEventHelper { //declare the event argument classes for the different GP events public sealed class GPMessageEventArgs : EventArgs { private string m_message = string.Empty; private esriGPMessageType m_messageType = esriGPMessageType.esriGPMessageTypeEmpty; private int m_errorCode = -1; #region class constructors public GPMessageEventArgs() : base() { } public GPMessageEventArgs(string message, esriGPMessageType messageType, int errorCode) : this() { m_message = message; m_messageType = messageType; m_errorCode = errorCode; } #endregion #region properties public string Message { get { return m_message; } set { m_message = value; } } public esriGPMessageType MessageType { get { return m_messageType; } set { m_messageType = value; } } public int ErrorCode { get { return m_errorCode; } set { m_errorCode = value; } } #endregion } public sealed class GPPostToolExecuteEventArgs : EventArgs { #region class members private GPMessageEventArgs[] m_messages; private int m_result = 0; private string m_displayName = string.Empty; private string m_name = string.Empty; private string m_pathName = string.Empty; private string m_toolbox = string.Empty; private string m_toolCategory = string.Empty; private esriGPToolType m_toolType = esriGPToolType.esriGPCustomTool; private string m_description = string.Empty; #endregion #region calss constructor public GPPostToolExecuteEventArgs() : base() { } #endregion #region properties public GPMessageEventArgs[] Messages { get { return m_messages; } set { m_messages = value; } } public int Result { get { return m_result; } set { m_result = value; } } public string DisplayName { get { return m_displayName; } set { m_displayName = value; } } public string Name { get { return m_name; } set { m_name = value; } } public string Toolbox { get { return m_toolbox; } set { m_toolbox = value; } } public string ToolCategory { get { return m_toolCategory; } set { m_toolCategory = value; } } public esriGPToolType ToolType { get { return m_toolType; } set { m_toolType = value; } } public string Description { get { return m_description; } set { m_description = value; } } public string PathName { get { return m_pathName; } set { m_pathName = value; } } #endregion } public sealed class GPPreToolExecuteEventArgs : EventArgs { #region class members private int m_processID = 0; private string m_displayName = string.Empty; private string m_name = string.Empty; private string m_pathName = string.Empty; private string m_toolbox = string.Empty; private string m_toolCategory = string.Empty; private esriGPToolType m_toolType = esriGPToolType.esriGPCustomTool; private string m_description = string.Empty; #endregion #region calss constructor public GPPreToolExecuteEventArgs() : base() { } #endregion #region properties public int ProcessID { get { return m_processID; } set { m_processID = value; } } public string DisplayName { get { return m_displayName; } set { m_displayName = value; } } public string Name { get { return m_name; } set { m_name = value; } } public string Toolbox { get { return m_toolbox; } set { m_toolbox = value; } } public string ToolCategory { get { return m_toolCategory; } set { m_toolCategory = value; } } public esriGPToolType ToolType { get { return m_toolType; } set { m_toolType = value; } } public string Description { get { return m_description; } set { m_description = value; } } public string PathName { get { return m_pathName; } set { m_pathName = value; } } #endregion } // A delegate type for hooking up change notifications. public delegate void MessageEventHandler(object sender, GPMessageEventArgs e); public delegate void ToolboxChangedEventHandler(object sender, EventArgs e); public delegate void PostToolExecuteEventHandler(object sender, GPPostToolExecuteEventArgs e); public delegate void PreToolExecuteEventHandler(object sender, GPPreToolExecuteEventArgs e); [ Guid("0CC39861-B4FE-45ea-8919-8295AF25F311"), ProgId("GeoprocessorEventHelper.GPMessageEventHandler"), ComVisible(true), Serializable ] /// <summary> ///A class that sends event notifications whenever the Messages are added. /// </summary> public class GPMessageEventHandler : IGeoProcessorEvents { // An event that clients can use to be notified whenever a GP message is posted. public event MessageEventHandler GPMessage; //an event notifying that a toolbox has changed public event ToolboxChangedEventHandler GPToolboxChanged; //an event which gets fired right after a tool finish execute public event PostToolExecuteEventHandler GPPostToolExecute; //an event which gets fired before a tool gets executed public event PreToolExecuteEventHandler GPPreToolExecute; #region IGeoProcessorEvents Members /// <summary> /// Called when a message has been posted while executing a SchematicGeoProcessing /// </summary> /// <param name="message"></param> void IGeoProcessorEvents.OnMessageAdded(IGPMessage message) { //fire the GPMessage event if (GPMessage != null) GPMessage(this, new GPMessageEventArgs(message.Description, message.Type, message.ErrorCode)); } /// <summary> /// Called immediately after a tool is executed by the GeoProcessor. /// </summary> /// <param name="Tool"></param> /// <param name="Values"></param> /// <param name="result"></param> /// <param name="Messages"></param> void IGeoProcessorEvents.PostToolExecute(IGPTool Tool, IArray Values, int result, IGPMessages Messages) { GPMessageEventArgs[] messages = new GPMessageEventArgs[Messages.Count]; IGPMessage gpMessage = null; for (int i = 0; i < Messages.Count; i++) { gpMessage = Messages.GetMessage(i); GPMessageEventArgs message = new GPMessageEventArgs(gpMessage.Description, gpMessage.Type, gpMessage.ErrorCode); messages[i] = message; } //create a new instance of GPPostToolExecuteEventArgs GPPostToolExecuteEventArgs e = new GPPostToolExecuteEventArgs(); e.DisplayName = Tool.DisplayName; e.Name = Tool.Name; e.PathName = Tool.PathName; e.Toolbox = Tool.Toolbox.Alias; e.ToolCategory = Tool.ToolCategory; e.ToolType = Tool.ToolType; e.Description = Tool.Description; e.Result = result; //fire the Post tool event if (null != GPPostToolExecute) GPPostToolExecute(this, e); } /// <summary> /// Called immediately prior to the GeoProcessor executing a tool. /// </summary> /// <param name="Tool"></param> /// <param name="Values"></param> /// <param name="processID"></param> void IGeoProcessorEvents.PreToolExecute(IGPTool Tool, IArray Values, int processID) { //create a new instance of GPPreToolExecuteEventArgs GPPreToolExecuteEventArgs e = new GPPreToolExecuteEventArgs(); e.DisplayName = Tool.DisplayName; e.Name = Tool.Name; e.PathName = Tool.PathName; e.Toolbox = Tool.Toolbox.Alias; e.ToolCategory = Tool.ToolCategory; e.ToolType = Tool.ToolType; e.Description = Tool.Description; e.ProcessID = processID; //fire the PreTool event if (null != GPPreToolExecute) GPPreToolExecute(this, e); } /// <summary> /// Called when a toolbox is added or removed from the GeoProcessor. /// </summary> void IGeoProcessorEvents.ToolboxChange() { if (GPToolboxChanged != null) GPToolboxChanged(this, new EventArgs()); } #endregion } }
[Visual Basic .NET]
GPEventHelper.vb
Imports Microsoft.VisualBasic Imports System Imports System.Collections.Generic Imports System.Text Imports System.Windows.Forms Imports System.Runtime.InteropServices Imports ESRI.ArcGIS.esriSystem Imports ESRI.ArcGIS.Geodatabase Imports ESRI.ArcGIS.Geoprocessing Namespace GeoprocessorEventHelper 'declare the event argument classes for the different GP events Public NotInheritable Class GPMessageEventArgs : Inherits EventArgs Private m_message As String = String.Empty Private m_messageType As esriGPMessageType = esriGPMessageType.esriGPMessageTypeEmpty Private m_errorCode As Integer = -1 #Region "class constructors" Public Sub New() MyBase.New() End Sub Public Sub New(ByVal msg As String, ByVal msgType As esriGPMessageType, ByVal errCode As Integer) Me.New() m_message = msg m_messageType = msgType m_errorCode = errCode End Sub #End Region #Region "properties" Public Property Message() As String Get Return m_message End Get Set(ByVal value As String) m_message = value End Set End Property Public Property MessageType() As esriGPMessageType Get Return m_messageType End Get Set(ByVal value As esriGPMessageType) m_messageType = value End Set End Property Public Property ErrorCode() As Integer Get Return m_errorCode End Get Set(ByVal value As Integer) m_errorCode = value End Set End Property #End Region End Class Public NotInheritable Class GPPostToolExecuteEventArgs : Inherits EventArgs #Region "class members" Private m_messages As GPMessageEventArgs() Private m_result As Integer = 0 Private m_displayName As String = String.Empty Private m_name As String = String.Empty Private m_pathName As String = String.Empty Private m_toolbox As String = String.Empty Private m_toolCategory As String = String.Empty Private m_toolType As esriGPToolType = esriGPToolType.esriGPCustomTool Private m_description As String = String.Empty #End Region #Region "class constructor" Public Sub New() MyBase.New() End Sub #End Region #Region "properties" Public Property Messages() As GPMessageEventArgs() Get Return m_messages End Get Set(ByVal value As GPMessageEventArgs()) m_messages = value End Set End Property Public Property Result() As Integer Get Return m_result End Get Set(ByVal value As Integer) m_result = value End Set End Property Public Property DisplayName() As String Get Return m_displayName End Get Set(ByVal value As String) m_displayName = value End Set End Property Public Property Name() As String Get Return m_name End Get Set(ByVal value As String) m_name = value End Set End Property Public Property Toolbox() As String Get Return m_toolbox End Get Set(ByVal value As String) m_toolbox = value End Set End Property Public Property ToolCategory() As String Get Return m_toolCategory End Get Set(ByVal value As String) m_toolCategory = value End Set End Property Public Property ToolType() As esriGPToolType Get Return m_toolType End Get Set(ByVal value As esriGPToolType) m_toolType = value End Set End Property Public Property Description() As String Get Return m_description End Get Set(ByVal value As String) m_description = value End Set End Property Public Property PathName() As String Get Return m_pathName End Get Set(ByVal value As String) m_pathName = value End Set End Property #End Region End Class Public NotInheritable Class GPPreToolExecuteEventArgs : Inherits EventArgs #Region "class members" Private m_processID As Integer = 0 Private m_displayName As String = String.Empty Private m_name As String = String.Empty Private m_pathName As String = String.Empty Private m_toolbox As String = String.Empty Private m_toolCategory As String = String.Empty Private m_toolType As esriGPToolType = esriGPToolType.esriGPCustomTool Private m_description As String = String.Empty #End Region #Region "class constructor" Public Sub New() MyBase.New() End Sub #End Region #Region "properties" Public Property ProcessID() As Integer Get Return m_processID End Get Set(ByVal value As Integer) m_processID = value End Set End Property Public Property DisplayName() As String Get Return m_displayName End Get Set(ByVal value As String) m_displayName = value End Set End Property Public Property Name() As String Get Return m_name End Get Set(ByVal value As String) m_name = value End Set End Property Public Property Toolbox() As String Get Return m_toolbox End Get Set(ByVal value As String) m_toolbox = value End Set End Property Public Property ToolCategory() As String Get Return m_toolCategory End Get Set(ByVal value As String) m_toolCategory = value End Set End Property Public Property ToolType() As esriGPToolType Get Return m_toolType End Get Set(ByVal value As esriGPToolType) m_toolType = value End Set End Property Public Property Description() As String Get Return m_description End Get Set(ByVal value As String) m_description = value End Set End Property Public Property PathName() As String Get Return m_pathName End Get Set(ByVal value As String) m_pathName = value End Set End Property #End Region End Class ' A delegate type for hooking up change notifications. Public Delegate Sub MessageEventHandler(ByVal sender As Object, ByVal e As GPMessageEventArgs) Public Delegate Sub ToolboxChangedEventHandler(ByVal sender As Object, ByVal e As EventArgs) Public Delegate Sub PostToolExecuteEventHandler(ByVal sender As Object, ByVal e As GPPostToolExecuteEventArgs) Public Delegate Sub PreToolExecuteEventHandler(ByVal sender As Object, ByVal e As GPPreToolExecuteEventArgs) ''' <summary> '''A class that sends event notifications whenever the Messages are added. ''' </summary> <Guid("0CC39861-B4FE-45ea-8919-8295AF25F311"), ProgId("GeoprocessorEventHelper.GPMessageEventHandler"), ComVisible(True), Serializable()> _ Public Class GPMessageEventHandler : Implements IGeoProcessorEvents ' An event that clients can use to be notified whenever a GP message is posted. Public Event GPMessage As MessageEventHandler 'an event notifying that a toolbox has changed Public Event GPToolboxChanged As ToolboxChangedEventHandler 'an event which gets fired right after a tool finish execute Public Event GPPostToolExecute As PostToolExecuteEventHandler 'an event which gets fired before a tool gets executed Public Event GPPreToolExecute As PreToolExecuteEventHandler #Region "IGeoProcessorEvents Members" ''' <summary> ''' Called when a message has been posted while executing a SchematicGeoProcessing ''' </summary> ''' <param name="message"></param> Private Sub OnMessageAdded(ByVal message As IGPMessage) Implements IGeoProcessorEvents.OnMessageAdded 'fire the GPMessage event If Not GPMessageEvent Is Nothing Then RaiseEvent GPMessage(Me, New GPMessageEventArgs(message.Description, message.Type, message.ErrorCode)) End If End Sub ''' <summary> ''' Called immediately after a tool is executed by the GeoProcessor. ''' </summary> ''' <param name="Tool"></param> ''' <param name="Values"></param> ''' <param name="result"></param> ''' <param name="Messages"></param> Private Sub PostToolExecute(ByVal Tool As IGPTool, ByVal Values As IArray, ByVal result As Integer, ByVal Messages As IGPMessages) Implements IGeoProcessorEvents.PostToolExecute Dim msg As GPMessageEventArgs() = New GPMessageEventArgs(Messages.Count - 1) {} Dim GPMessageEvent As IGPMessage = Nothing Dim i As Integer = 0 Do While i < Messages.Count GPMessageEvent = Messages.GetMessage(i) Dim message As GPMessageEventArgs = New GPMessageEventArgs(GPMessageEvent.Description, GPMessageEvent.Type, GPMessageEvent.ErrorCode) msg(i) = message i += 1 Loop 'create a new instance of GPPostToolExecuteEventArgs Dim e As GPPostToolExecuteEventArgs = New GPPostToolExecuteEventArgs() e.DisplayName = Tool.DisplayName e.Name = Tool.Name e.PathName = Tool.PathName e.Toolbox = Tool.Toolbox.Alias e.ToolCategory = Tool.ToolCategory e.ToolType = Tool.ToolType e.Description = Tool.Description e.Result = result 'fire the Post tool event If Not Nothing Is GPPostToolExecuteEvent Then RaiseEvent GPPostToolExecute(Me, e) End If End Sub ''' <summary> ''' Called immediately prior to the GeoProcessor executing a tool. ''' </summary> ''' <param name="Tool"></param> ''' <param name="Values"></param> ''' <param name="processID"></param> Private Sub PreToolExecute(ByVal Tool As IGPTool, ByVal Values As IArray, ByVal processID As Integer) Implements IGeoProcessorEvents.PreToolExecute 'create a new instance of GPPreToolExecuteEventArgs Dim e As GPPreToolExecuteEventArgs = New GPPreToolExecuteEventArgs() e.DisplayName = Tool.DisplayName e.Name = Tool.Name e.PathName = Tool.PathName e.Toolbox = Tool.Toolbox.Alias e.ToolCategory = Tool.ToolCategory e.ToolType = Tool.ToolType e.Description = Tool.Description e.ProcessID = processID 'fire the PreTool event If Not Nothing Is GPPreToolExecuteEvent Then RaiseEvent GPPreToolExecute(Me, e) End If End Sub ''' <summary> ''' Called when a toolbox is added or removed from the GeoProcessor. ''' </summary> Private Sub ToolboxChange() Implements IGeoProcessorEvents.ToolboxChange If Not GPToolboxChangedEvent Is Nothing Then RaiseEvent GPToolboxChanged(Me, New EventArgs()) End If End Sub #End Region End Class End Namespace