private void DoStep(ref GetFlowmeterCheckRealTimeDataAckParams ackParams) { if (lblFlowCheck.Text == "成功") { _iResults[0] = 1; } else if (lblFlowCheck.Text == "失败") { _iResults[0] = -1; } if (lblO2SpanCheck.Text == "成功") { _iResults[1] = 1; } else if (lblO2SpanCheck.Text == "失败") { _iResults[1] = -1; } if (lblTempeCheck.Text == "成功") { _iResults[2] = 1; } else if (lblTempeCheck.Text == "失败") { _iResults[2] = -1; } if (lblPressureCheck.Text == "成功") { _iResults[3] = 1; } else if (lblPressureCheck.Text == "失败") { _iResults[3] = -1; } if (_iResults[_step] == 1) { _timer.Enabled = false; _dynoCmd.GetFlowmeterCheckRealTimeDataCmd(true, ref ackParams, out string errMsg); if (_step < _iResults.Length - 1) { StartFlowmeterCheckParams cmdParams = new StartFlowmeterCheckParams { ClientID = _dynoCmd.ClientID, stopCheck = false, step = ++_step, FlowmeterTargetPressure = _mainCfg.Flowmeter.TargetPressure, FlowmeterTargetTempe = _mainCfg.Flowmeter.TargetTempe }; StartFlowmeterCheckAckParams startAckParams = new StartFlowmeterCheckAckParams(); if (!_dynoCmd.StartFlowmeterCheckCmd(cmdParams, ref startAckParams, out errMsg)) { MessageBox.Show("执行开始流量计预热命令失败", "执行命令出错", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { _timer.Enabled = true; Invoke((EventHandler) delegate { lblLowFlowSpan.Text = startAckParams.FlowmeterLowFlowSpan.ToString("F"); lblO2Span.Text = startAckParams.FlowmeterO2SpanLow.ToString("F"); lblO2Span.Text += "/" + startAckParams.FlowmeterO2SpanHight.ToString("F"); }); } } else { ++_step; } } }
private void OnTimer(object source, System.Timers.ElapsedEventArgs e) { GetFlowmeterCheckRealTimeDataAckParams ackParams = new GetFlowmeterCheckRealTimeDataAckParams(); if (_dynoCmd.GetFlowmeterCheckRealTimeDataCmd(false, ref ackParams, out string errMsg) && ackParams != null) { if (_timer != null && _timer.Enabled) { try { Invoke((EventHandler) delegate { if (ackParams.msg != null && ackParams.msg.Length > 0) { lblMsg.Text = ackParams.msg; } lblFlow.Text = ackParams.Flow.ToString("F"); lblDiluteO2.Text = ackParams.Temperature.ToString("F"); lblTemperature.Text = ackParams.Pressure.ToString("F"); lblPressure.Text = ackParams.DiluteO2.ToString("F"); if (ackParams.FlowCheckResult != null && ackParams.FlowCheckResult.Length > 0) { lblFlowCheck.Text = ackParams.FlowCheckResult; } if (ackParams.O2SpanCheckResult != null && ackParams.O2SpanCheckResult.Length > 0) { lblO2SpanCheck.Text = ackParams.O2SpanCheckResult; } if (ackParams.TempeCheckResult != null && ackParams.TempeCheckResult.Length > 0) { lblTempeCheck.Text = ackParams.TempeCheckResult; } if (ackParams.PressureCheckResult != null && ackParams.PressureCheckResult.Length > 0) { lblPressureCheck.Text = ackParams.PressureCheckResult; } if (ackParams.FlowmeterCheckResult != null && ackParams.FlowmeterCheckResult.Length > 0) { lblResult.Text = ackParams.FlowmeterCheckResult; } }); } catch (ObjectDisposedException) { // 关闭窗口后仍有一定几率会进入主UI线程,此时访问界面元素会引发此异常,直接忽略即可 } switch (_step) { case 0: DoStep(ref ackParams); break; case 1: DoStep(ref ackParams); break; case 2: DoStep(ref ackParams); break; case 3: DoStep(ref ackParams); break; } foreach (int item in _iResults) { if (item < 0) { _timer.Enabled = false; try { Invoke((EventHandler) delegate { lblMsg.Text = "流量计预热失败!"; lblFlow.Text = "--"; lblDiluteO2.Text = "--"; lblTemperature.Text = "--"; lblPressure.Text = "--"; }); } catch (ObjectDisposedException) { // 关闭窗口后仍有一定几率会进入主UI线程,此时访问界面元素会引发此异常,直接忽略即可 } break; } } int iResult = 0; if (_step > 3) { foreach (int item in _iResults) { iResult += item; } if (iResult >= 4 && ackParams.FlowmeterCheckResult == "成功") { _timer.Enabled = false; _dicResults[this] = true; try { Invoke((EventHandler) delegate { lblMsg.Text = "流量计预热成功"; lblFlow.Text = "--"; lblDiluteO2.Text = "--"; lblTemperature.Text = "--"; lblPressure.Text = "--"; }); } catch (ObjectDisposedException) { // 关闭窗口后仍有一定几率会进入主UI线程,此时访问界面元素会引发此异常,直接忽略即可 } PreheatingDoneEventArgs args = new PreheatingDoneEventArgs { Result = _dicResults[this] }; PreheatingDone?.Invoke(this, args); } } } } }