OTSMeasureDisplayResult.cs 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591
  1. 
  2. using OTSModelSharp;
  3. using OTSDataType;
  4. using System;
  5. using System.Collections;
  6. using System.Collections.Generic;
  7. using System.ComponentModel;
  8. using System.Drawing;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading;
  12. using System.Windows.Forms;
  13. using static OTSDataType.otsdataconst;
  14. using static OTSModelSharp.STMSampleResultData;
  15. namespace OTSMeasureApp
  16. {
  17. class OTSMeasureDisplayResult
  18. {
  19. NLog.Logger log ;
  20. public enum ProgressState
  21. {
  22. MeasureCheckReport = 1,
  23. MeasureResult = 2
  24. }
  25. #region 变量生成汇总
  26. OTSIncAMeasureAppForm m_MeasureApp = null;
  27. //样品台窗口对象
  28. public OTSSamplespaceWindow m_OTSSamplespaceWindow = null;
  29. //测量进度信息窗口对象
  30. public MeasureCheckResultInfoWindow m_MeasureCheckReportInfoWindow = null;
  31. //测量结果信息窗口对象
  32. public OTSMeasureResultWindow m_OTSMeasureResultWindow = null;
  33. //在窗体TAB测量状态中显示BSE图
  34. public OTSMeasureStatusWindow m_OTSMeasureStatusWindow = null;
  35. public System.ComponentModel.BackgroundWorker m_bgWorker;
  36. ST_MSTMsg MeasureResultMsrData;
  37. //已完成帧图的绘制 根据位置-判断相差范围 四舍五入返回的数值有偏差
  38. #endregion
  39. #region 构造方法
  40. public OTSMeasureDisplayResult( OTSIncAMeasureAppForm m_MeasureApps, BackgroundWorker a_bgWorker)
  41. {
  42. log = NLog.LogManager.GetCurrentClassLogger();
  43. m_MeasureApp = m_MeasureApps;
  44. m_OTSSamplespaceWindow = m_MeasureApps.m_SamplepaceWindow;
  45. m_OTSMeasureResultWindow = m_MeasureApp.m_MeasureRetWindow;
  46. m_OTSMeasureStatusWindow = new OTSMeasureStatusWindow(m_MeasureApp);
  47. Control.CheckForIllegalCrossThreadCalls = false;
  48. //测量结束信息窗口对象
  49. m_MeasureCheckReportInfoWindow = new MeasureCheckResultInfoWindow();
  50. m_bgWorker = a_bgWorker;
  51. //设置报告更新是否可用
  52. m_bgWorker.WorkerReportsProgress = true;
  53. //设置支持取消操作是否可用
  54. m_bgWorker.WorkerSupportsCancellation = true;
  55. m_bgWorker.ProgressChanged += new ProgressChangedEventHandler(backgroundWorker_ProgressChanged);
  56. m_bgWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker_RunWorkerCompleted);
  57. }
  58. #endregion
  59. #region 修改窗体控件的响应事件_ProgressChanged
  60. //这里就是通过响应消息,来处理界面的显示工作
  61. private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
  62. {
  63. try
  64. {
  65. if (e.ProgressPercentage == (int)ProgressState.MeasureCheckReport)
  66. {
  67. MeasureResultInfo(MeasureResultMsrData);
  68. }
  69. //测量结果
  70. if (e.ProgressPercentage == (int)ProgressState.MeasureResult)
  71. {
  72. if (m_OTSMeasureResultWindow == null)
  73. {
  74. //实例窗体
  75. m_OTSMeasureResultWindow = m_MeasureApp.m_MeasureRetWindow;
  76. }
  77. //设置工作样品
  78. m_MeasureApp.m_ProjParam.SetWorkSample(m_OTSSamplespaceWindow.m_SampleSelectName);
  79. //获取工作样品信息
  80. COTSSample WSample = m_MeasureApp.m_ProjParam.GetWorkSample();
  81. CMsrDisplayResults cMsrResultsClr = WSample.GetMsrResults();
  82. //获取结果文件 颗粒列表信息
  83. List<CMsrResultItem> cMsrResultItemClrList = cMsrResultsClr.GetResultItems();
  84. //根据编号获取分类名称
  85. List<CMsrResultItem> cMsrResultItemClrListTemp = cMsrResultItemClrList;
  86. //设置测量状态数据列表
  87. SetMeasureListInfo(cMsrResultItemClrList);
  88. }
  89. }
  90. catch (Exception ex)
  91. {
  92. log.Error( ex.ToString());
  93. }
  94. }
  95. #endregion
  96. #region 处理完成的响应事件_RunWorkerCompleted
  97. //这里是后台工作完成后的消息处理,可以在这里进行后续的处理工作。
  98. private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  99. {
  100. //m_bgWorker.CancelAsync();
  101. //m_bgWorker = null;
  102. }
  103. #endregion
  104. #region 打开测量结果窗口
  105. /// <summary>
  106. /// 打开测量结果窗口
  107. /// </summary>
  108. public void MeasureResultInfo(ST_MSTMsg sMSR)
  109. {
  110. //打开测量结果窗体
  111. if (m_MeasureCheckReportInfoWindow.IsDisposed)
  112. {
  113. m_MeasureCheckReportInfoWindow = new MeasureCheckResultInfoWindow();
  114. }
  115. m_MeasureCheckReportInfoWindow.Activate();
  116. m_MeasureCheckReportInfoWindow.Show();
  117. SetMeasureResultInfo(sMSR);
  118. }
  119. #endregion
  120. #region 显示BSE图片
  121. public void OTSMeasureStatusWindowFun(int width, int height, byte[] ImageData, OTSIncAMeasureAppForm m_MeasureApps)
  122. {
  123. //设置图像数据与状态
  124. OTSMeasureStatusWindow.bfResult = true;
  125. m_MeasureApps.m_MessureStatuWindow.bBseData = ImageData;
  126. //获取灰度图数据
  127. double[] dGrayLevelData = new double[255];
  128. dGrayLevelData = GetStaticGaryData(ImageData, dGrayLevelData);
  129. m_MeasureApps.m_MessureStatuWindow.dGrayLevelData = dGrayLevelData;
  130. if (m_MeasureApps.m_MessureStatuWindow.panelXray.Visible)
  131. {
  132. m_MeasureApps.m_MessureStatuWindow.panelXray.Visible = false;
  133. }
  134. //删除点标记
  135. m_MeasureApps.m_MessureStatuWindow.DelElementPointGDIObjects();
  136. //显示BSE图
  137. m_MeasureApps.m_MessureStatuWindow.pbBSEImage.Show();
  138. //显示BSE图
  139. m_MeasureApps.m_MessureStatuWindow.ShowImage(width, height, ImageData);
  140. }
  141. public double[] GetStaticGaryData(byte[] Imagedata, double[] GrayLevelData)
  142. {
  143. try
  144. {
  145. //获得下标每一点的灰度值,并在数组里加一
  146. for (int i = 0; i < Imagedata.Length; i++)
  147. {
  148. byte graylevel = Imagedata[i];
  149. if (graylevel > 0 && graylevel < 255)
  150. {
  151. GrayLevelData[graylevel] += 1;
  152. }
  153. }
  154. return GrayLevelData;
  155. }
  156. catch (Exception ex)
  157. {
  158. log.Error(ex.ToString());
  159. return null;
  160. }
  161. }
  162. #endregion
  163. #region 隐藏BSE图片
  164. #endregion
  165. #region 初始窗口对象
  166. int intFlag = 0;
  167. public void RunThreadLoadEvent()
  168. {
  169. if (intFlag == 0)
  170. {
  171. m_bgWorker.RunWorkerAsync();
  172. intFlag++;
  173. }
  174. }
  175. #endregion
  176. #region 设置测量状态列表数据
  177. /// <summary>
  178. /// 设置测量状态列表数据
  179. /// </summary>
  180. /// <param name="stratTime"></param>
  181. public void SetMeasureListInfo(IList list)
  182. {
  183. //设置开始时间
  184. if (list != null)
  185. {
  186. //获取测量状态Grid中的数据list
  187. m_OTSMeasureResultWindow.SetMeasureListInfo(list);
  188. }
  189. }
  190. #endregion
  191. #region 设置开始时间
  192. /// <summary>
  193. /// 设置开始时间
  194. /// </summary>
  195. /// <param name="stratTime"></param>
  196. public void SetStartTime(string stratTime)
  197. {
  198. //设置开始时间
  199. if (stratTime != null)
  200. {
  201. if (stratTime != "")
  202. {
  203. m_OTSMeasureResultWindow.SetStartTime(stratTime);
  204. }
  205. }
  206. }
  207. #endregion
  208. #region 设置测量结束窗体中信息内容
  209. public void SetMeasureResultInfo(ST_MSTMsg SMsrData)
  210. {
  211. //设置开始时间
  212. string startTime = SMsrData.STMThreadStu.SMsrCompleteData.csMsrStartTime;
  213. //设置结束时间
  214. string endTime = SMsrData.STMThreadStu.SMsrCompleteData.csMsrEndTime;
  215. //设置测量数
  216. int completeSampleCount = SMsrData.STMThreadStu.SMsrCompleteData.iMsrCompleteSampleCount;
  217. //设置帧图数
  218. int completeFieldCount = SMsrData.STMThreadStu.SMsrCompleteData.iMsrCompleteFieldCount;
  219. //颗粒数
  220. int particleCount = SMsrData.STMThreadStu.SMsrCompleteData.iParticleCount;
  221. //用时
  222. TimeSpan measureTime = SMsrData.STMThreadStu.SMsrCompleteData.MsrUsedTime;
  223. string measureState = string.Empty;
  224. OTSCommon.Language lan = new OTSCommon.Language();
  225. Hashtable table= lan.GetNameTable("OTSMeasureResultWindow");
  226. //状态
  227. switch (SMsrData.STMThreadStu.iMsrStatu)
  228. {
  229. case OTS_MSR_THREAD_STATUS.COMPLETED:
  230. measureState = table["state1"].ToString();
  231. break;
  232. case OTS_MSR_THREAD_STATUS.FAILED:
  233. measureState = table["state2"].ToString();
  234. break;
  235. case OTS_MSR_THREAD_STATUS.STOPPED:
  236. measureState = table["state3"].ToString();
  237. break;
  238. }
  239. //设置测量结果窗体信息
  240. string measureTimes = string.Empty;
  241. m_MeasureCheckReportInfoWindow.SetMeasureStateInfo(measureState, completeSampleCount, completeFieldCount, particleCount, startTime, measureTime, endTime, ref measureTimes);
  242. }
  243. #endregion
  244. #region 设置测量用时
  245. public void SetMeasureTime(TimeSpan tSpan)
  246. {
  247. m_OTSMeasureResultWindow.SetMeasureTime(tSpan);
  248. }
  249. #endregion
  250. #region 设置样品名称
  251. /// <summary>
  252. /// 设置样品名称
  253. /// </summary>
  254. /// <param name="SetSampleName"></param>
  255. public void SetSampleName(string sampleName)
  256. {
  257. //设置开始时间
  258. if (sampleName != null)
  259. {
  260. if (sampleName != "")
  261. {
  262. m_MeasureApp.m_SamplepaceWindow.SetSampleOrder(sampleName);
  263. double iWDistance = 0;
  264. double dMagni = 0;
  265. m_MeasureApp.m_ProjParam.GetWorkingSampleSEMData(ref iWDistance, ref dMagni);
  266. if (CMeasureThreadWrapper.DoRunType == MSR_THREAD_RunSTATUS.RUNMEASURE)
  267. {
  268. m_OTSMeasureResultWindow.SetSampleName(sampleName);
  269. }
  270. m_MeasureApp.m_SamplepaceWindow.Invalidate();
  271. }
  272. }
  273. }
  274. #endregion
  275. #region 测量状态进度窗口
  276. public void MeasureStateProgressInfo(SAMPLEFIELDDATA FieldData)
  277. {
  278. //样品测量中的总帧图数
  279. int MeasureFieldTotalCount = FieldData.iMeasureFieldCount;
  280. //样品测量中当前已测量的帧图数
  281. int CompleteFieldCount = FieldData.iCompleteFieldCount;
  282. int ParticleCount = FieldData.iSParticleCount;
  283. if (CompleteFieldCount >= 0 && MeasureFieldTotalCount >= 0)
  284. {
  285. m_bgWorker.ReportProgress((int)ProgressState.MeasureResult);
  286. //设置当前进度信息(当前Field数量与Field总数)
  287. m_OTSMeasureResultWindow.SetCurrentProgressInfo(CompleteFieldCount, MeasureFieldTotalCount, ParticleCount);
  288. }
  289. }
  290. #endregion
  291. #region 设置样品孔中BSE图像信息
  292. /// <summary>
  293. /// 设置样品孔中BSE图像信息
  294. /// </summary>
  295. /// <param name="ImageData">获取显示BSE的图片数据</param>
  296. /// <param name="width">图片宽度</param>
  297. /// <param name="height">图片高度</param>
  298. /// <param name="fieldPos">Field位置</param>
  299. public void SetHoleBSEImageData(byte[] ImageData, int width, int height, Point fieldPos)
  300. {
  301. m_MeasureApp.m_SamplepaceWindow.AddHoleBSEImageData(ImageData, width, height, fieldPos);
  302. }
  303. #endregion
  304. #region 测量方法
  305. //运行测量状态方法
  306. public void RunMeasureState(ST_MSTMsg SMsrData)
  307. {
  308. try
  309. {
  310. //消息枚举 测量状态、测量结果
  311. ENUM_MSG_TYPE dataType = SMsrData.iMsgType;
  312. //测量状态:开始状态、完成状态(测量停止、测量失败、测量完成)
  313. OTS_MSR_THREAD_STATUS msrStatus = SMsrData.STMThreadStu.iMsrStatu;
  314. //获取当前线程执行类型 1:测量 2:获取样品孔图片
  315. var runThreadType = CMeasureThreadWrapper.DoRunType;
  316. //获取需显示的grid信息
  317. OTSSamplePropertyInfo MeasureInfo = new OTSSamplePropertyInfo();
  318. m_MeasureApp.m_ProjParam.GetWorkSamplePerameter(m_MeasureApp.m_ProjParam.GetWorkSample(), ref MeasureInfo);
  319. switch (dataType)
  320. {
  321. //测量线程状态
  322. case ENUM_MSG_TYPE.MTHREADSTATUS:
  323. switch (msrStatus)
  324. {
  325. //测量状态在进行中-测量开始
  326. case OTS_MSR_THREAD_STATUS.INPROCESS:
  327. //当前线程执行类型 1:测量
  328. if (runThreadType == MSR_THREAD_RunSTATUS.RUNMEASURE)
  329. {
  330. string startTime = SMsrData.STMThreadStu.csMsrStartTime;
  331. }
  332. ////判断信息来源 拍摄样品孔图片 或是 测量开始
  333. //if (m_MeasureApp.m_RunType == MSR_THREAD_RunSTATUS.RUNSampleHoleImage)
  334. //{
  335. // //根据放大倍数、重新绘制帧图信息
  336. // m_MeasureApp.m_SamplepaceWindow.DrawMeasureField();
  337. //}
  338. break;
  339. //测量状态已完成
  340. case OTS_MSR_THREAD_STATUS.COMPLETED:
  341. //当前线程执行类型 1:测量
  342. if (runThreadType == MSR_THREAD_RunSTATUS.RUNMEASURE)
  343. {
  344. string inprocessEndTime = SMsrData.STMThreadStu.csMsrEndTime;
  345. SetMeasureResultInfo(SMsrData);
  346. MeasureResultMsrData = SMsrData;
  347. m_bgWorker.ReportProgress((int)ProgressState.MeasureCheckReport, SMsrData);
  348. //激活跳转至报告程序按钮
  349. m_MeasureApp.rbPReport.Enabled = true;
  350. m_MeasureApp.rbReport.Enabled = true;
  351. }
  352. //测量完成,更新Grid显示的测量信息
  353. m_MeasureApp.m_SPropertyWindows.DisplaySampleMeasureInfo(MeasureInfo);
  354. break;
  355. //测量状态已失败
  356. case OTS_MSR_THREAD_STATUS.FAILED:
  357. //当前线程执行类型 1:测量
  358. if (runThreadType == MSR_THREAD_RunSTATUS.RUNMEASURE)
  359. {
  360. string failedEndTime = SMsrData.STMThreadStu.csMsrEndTime;
  361. SetMeasureResultInfo(SMsrData);
  362. MeasureResultMsrData = SMsrData;
  363. m_bgWorker.ReportProgress((int)ProgressState.MeasureCheckReport, SMsrData);
  364. }
  365. //测量失败,更新Grid显示的测量信息
  366. m_MeasureApp.m_SPropertyWindows.DisplaySampleMeasureInfo(MeasureInfo);
  367. break;
  368. //测量状态已停止
  369. case OTS_MSR_THREAD_STATUS.STOPPED:
  370. //当前线程执行类型 1:测量
  371. if (runThreadType == MSR_THREAD_RunSTATUS.RUNMEASURE)
  372. {
  373. string stopEndTime = SMsrData.STMThreadStu.csMsrEndTime;
  374. //打开测量结果窗口
  375. SetMeasureResultInfo(SMsrData);
  376. MeasureResultMsrData = SMsrData;
  377. m_bgWorker.ReportProgress((int)ProgressState.MeasureCheckReport, SMsrData);
  378. //激活跳转至报告程序按钮
  379. m_MeasureApp.rbPReport.Enabled = true;
  380. m_MeasureApp.rbReport.Enabled = true;
  381. }
  382. //测量停止,更新Grid显示的测量信息
  383. m_MeasureApp.m_SPropertyWindows.DisplaySampleMeasureInfo(MeasureInfo);
  384. break;
  385. }
  386. break;
  387. //测量结果
  388. case ENUM_MSG_TYPE.MSAMPLESTATUS:
  389. //获取测量状态样品信息
  390. OTS_MSR_SAMPLE_STATUS msrSampleStatu = SMsrData.STMSampleStu.iMsrSampleStatu;
  391. switch (msrSampleStatu)
  392. {
  393. case OTS_MSR_SAMPLE_STATUS.INPROCESS:
  394. //当前线程执行类型 1:测量
  395. if (runThreadType == MSR_THREAD_RunSTATUS.RUNMEASURE)
  396. {
  397. //获取样品名称
  398. string sampleName = SMsrData.STMSampleStu.cSampleName;
  399. //样品测量开始时间
  400. string csSampleMsrStartTime = SMsrData.STMSampleStu.csSampleMsrStartTime;
  401. //设置样品名称
  402. if (sampleName != null)
  403. {
  404. if (sampleName != "")
  405. {
  406. SetSampleName(sampleName);
  407. //设置开始时间
  408. SetStartTime(csSampleMsrStartTime);
  409. }
  410. }
  411. //切换样品
  412. m_MeasureApp.SwitchWSample(sampleName);
  413. //设置样品名称
  414. m_OTSMeasureResultWindow.SetSampleName(sampleName);
  415. }
  416. else if (runThreadType == MSR_THREAD_RunSTATUS.RUNSampleHoleImage)
  417. {
  418. //获取样品名称
  419. string sampleName = SMsrData.STMSampleStu.cSampleName;
  420. //设置样品名称
  421. if (sampleName == null)
  422. {
  423. if (sampleName.Equals(""))
  424. {
  425. if (m_MeasureApp.m_ProjParam.GetWorkSample() != null)
  426. {
  427. sampleName = m_MeasureApp.m_ProjParam.GetWorkSample().GetName();
  428. }
  429. }
  430. }
  431. SetSampleName(sampleName);
  432. }
  433. break;
  434. }
  435. break;
  436. case ENUM_MSG_TYPE.MSAMPLERESULT:
  437. //获取测量状态的Field与BSE信息
  438. MSAMPLE_RET retDataType = SMsrData.STMSampleRetData.iRetDataType;
  439. //判断测量状态提供Field与BSE信息
  440. switch (retDataType)
  441. {
  442. case MSAMPLE_RET.BSE_DATA:
  443. //当前线程执行类型 1:测量
  444. if (runThreadType == MSR_THREAD_RunSTATUS.RUNMEASURE)
  445. {
  446. //获取显示BSE的图片数据
  447. byte[] ImageData = SMsrData.STMSampleRetData.BSEData.lpBSEData;
  448. //图片宽度
  449. int width = SMsrData.STMSampleRetData.BSEData.iBSEDataWidth;
  450. //图片高度
  451. int height = SMsrData.STMSampleRetData.BSEData.iBSEDataHeight;
  452. //显示状态中的BSE图像控件
  453. if (!m_MeasureApp.m_MessureStatuWindow.pbBSEImage.Visible)
  454. {
  455. m_MeasureApp.m_MessureStatuWindow.pbBSEImage.Visible = true;
  456. }
  457. //调用测量状态TAB中窗体 显示BSE图片
  458. OTSMeasureStatusWindowFun(width, height, ImageData, m_MeasureApp);
  459. }
  460. else if (runThreadType == MSR_THREAD_RunSTATUS.RUNSampleHoleImage)
  461. {
  462. //获取显示BSE的图片数据
  463. byte[] ImageData = SMsrData.STMSampleRetData.BSEData.lpBSEData;
  464. //图片宽度
  465. int width = SMsrData.STMSampleRetData.BSEData.iBSEDataWidth;
  466. //图片高度
  467. int height = SMsrData.STMSampleRetData.BSEData.iBSEDataHeight;
  468. //Field位置
  469. Point fieldPos = SMsrData.STMSampleRetData.BSEData.pos;
  470. //设置样品孔中BSE图像信息
  471. SetHoleBSEImageData(ImageData, width, height, fieldPos);
  472. }
  473. break;
  474. case MSAMPLE_RET.FIELD_DATA:
  475. //当前线程执行类型 1:测量
  476. if (runThreadType == MSR_THREAD_RunSTATUS.RUNMEASURE)
  477. {
  478. //设置测量当前用时
  479. if (SMsrData.STMSampleRetData.SFieldData.TUsedTime != null)
  480. {
  481. SetMeasureTime(SMsrData.STMSampleRetData.SFieldData.TUsedTime);
  482. }
  483. MeasureStateProgressInfo(SMsrData.STMSampleRetData.SFieldData);
  484. var sam = m_MeasureApp.m_SamplepaceWindow.GetWorkingVisualSample();
  485. m_MeasureApp.m_SamplepaceWindow. ChangeDoneMeasureState(sam,SMsrData.STMSampleRetData.SFieldData.FieldPos, Color.Green);
  486. m_MeasureApp.m_SamplepaceWindow.Invalidate();
  487. }
  488. break;
  489. case MSAMPLE_RET.START_MSR_FIELD:
  490. //当前线程执行类型 1:测量
  491. if (runThreadType == MSR_THREAD_RunSTATUS.RUNMEASURE)
  492. {
  493. var sam = m_MeasureApp.m_SamplepaceWindow.GetWorkingVisualSample();
  494. m_MeasureApp.m_SamplepaceWindow.ChangeDoneMeasureState(sam,SMsrData.STMSampleRetData.SMsrField.FieldPos, Color.Yellow);
  495. m_MeasureApp.m_SamplepaceWindow.Invalidate();
  496. }
  497. break;
  498. }
  499. break;
  500. }
  501. }
  502. catch (Exception ex)
  503. {
  504. log.Error("RunMeasureState--The error message:" + ex.ToString());
  505. }
  506. }
  507. #endregion
  508. }
  509. }