一個簡單ArcMap插件進度消息通知窗口的實現方法。
一個進度窗體
①搞一個label,塞進一個gif動圖,讓窗體Show出來的時候一直轉啊轉啊轉;
②搞一個label寫點提示文字“請稍等”啥的;再搞一個label用來顯示進度。
進度Form的代碼如下:
一個進度窗體管理器
ProgressFormManger
代碼如下:
進度消息的傳遞機制
一個委托
public delegate void ProgressChangedEventHandler(object o,ProgressChangedEventArgs e);
一個接口+一個事件
public interface IProgress
{
event ProgressChangedEventHandler ProgressChangedEvent;
}
一個進度消息結構體
/// <summary>
/// 進度消息結構體。
/// </summary>
public struct ProgressChangedEventArgs
{
/// <summary>
/// 當前處理進度
/// </summary>
public int CurrentIndex { get; set; }
/// <summary>
/// 總的要素個數
/// </summary>
public int FeatureCount { get; set; }
/// <summary>
/// 文字描述的進度消息
/// </summary>
public string Message { get; set; }
}
一個進度消息發送器
消息通知的發起
工作類繼承IProgress接口,實現ProgressChangedEvent事件屬性
工作類繼承ProgressMessagesSender類,實現OnProgressChange方法。
OnProgressChange(checkProgressChangedEventHandler,index, featureCount);
OnProgressChange(this.progressChangeEventHandler, ">>> 創建待處理要素類的副本。");
進度窗口的更新
定義IProgressSetter接口、擴展方法
工具窗口繼承IProgressSetter接口
通過GetArcMapRECT方法獲取ArcMap窗口四角坐標的結構體,用以實例化進度窗口時確定其位置。
ShowProgressForm方法傳入繼承IProgress接口的“處理器”,進度消息窗口實例progressForm,進度消息窗口管理器實例manger,展示進度窗體。