GP工具如果运行时间过长,会自动开辟新线程,将主线程还给程序,这样就难以获取其运行状态。
不过gp工具似乎没有内置能实时获取进度的参数。
可以通过开辟一个查询线程,实时获取其当前状态。
private void PRV_GetStatus()
{
WATCH_StopWatch.Start(); // 开始监视代码运行时间
while (GP_Progress.Status != ESRI.ArcGIS.esriSystem.esriJobStatus.esriJobSucceeded && GP_Progress.Status != ESRI.ArcGIS.esriSystem.esriJobStatus.esriJobFailed)
{
TS_TimeSpan = WATCH_StopWatch.Elapsed;
S_Status = "状态:" + GP_Progress.Status.ToString() + "已经运行:" + ((int)(TS_TimeSpan.TotalSeconds)).ToString() + "秒";
Thread.Sleep(1000);
Console.WriteLine(S_Status);//控制台输出状态
}
WATCH_StopWatch.Stop();//停止计时器
WATCH_StopWatch.Reset();//重置计时器
TH_TimeSpan.Abort();//线程自杀
}
使用的时候:
公共变量:
IGeoProcessorResult GP_Progress;//GP状态
TimeSpan TS_TimeSpan;//时间间隔
Thread TH_TimeSpan;//线程
函数中使用:
TH_TimeSpan = new Thread(PRV_GetStatus);//开辟线程计时
TH_TimeSpan.Start();
GP_Progress = GP_Tool.ExecuteAsync(Temp_FCToFC);
TH_TimeSpan.Join();//阻塞主线程