public DynoGlideCheckForm(DynoCmd dynoCmd, MainSetting mainCfg, Logger log, bool bDiesel) { InitializeComponent(); _lastHeight = Height; _dynoCmd = dynoCmd; _mainCfg = mainCfg; _log = log; _bDiesel = bDiesel; _dtRTData = new DataTable("RTData"); _dtResult = new DataTable("Result"); _timer = new System.Timers.Timer(_mainCfg.RealtimeInterval); _timer.Elapsed += OnTimer; _timer.AutoReset = true; _dieselIHP = DieselIHP.IHP30kW; }
private void OnTimer(object source, System.Timers.ElapsedEventArgs e) { if (_bDiesel) { double IHP = 0; switch (_dieselIHP) { case DieselIHP.IHP30kW: IHP = 30; break; case DieselIHP.IHP20kW: IHP = 20; break; case DieselIHP.IHP10kW: IHP = 10; break; } GetCYDynoLoadGlideCheckRealTimeDataAckParams ackParams = new GetCYDynoLoadGlideCheckRealTimeDataAckParams(); if (_dynoCmd.GetCYDynoLoadGlideCheckRealTimeDataCmd(IHP, ref ackParams, out string errMsg) && ackParams != null) { if (_timer != null && _timer.Enabled) { try { DataRow dr = _dtRTData.NewRow(); TimeSpan interval = DateTime.Now - _startTime; if (interval.TotalSeconds < 0.001) { interval = TimeSpan.Zero; } dr["TimeSN"] = interval.TotalSeconds.ToString("F1"); dr["Power"] = ackParams.power; dr["Speed"] = ackParams.speed; dr["TorqueF"] = ackParams.torquef; _dtRTData.Rows.Add(dr); FillDieselResult(ackParams); if (ackParams.step == 7) { _dieselIHP = DieselIHP.IHP20kW; } else if (ackParams.step == 15) { _dieselIHP = DieselIHP.IHP10kW; } Invoke((EventHandler) delegate { lblPower.Text = ackParams.power.ToString("F"); lblSpeed.Text = ackParams.speed.ToString("F"); lblTorqueF.Text = ackParams.torquef.ToString("F"); chart1.DataBind(); switch (_dieselIHP) { case DieselIHP.IHP30kW: txtBoxIHP.Text = "30"; break; case DieselIHP.IHP20kW: txtBoxIHP.Text = "20"; break; case DieselIHP.IHP10kW: txtBoxIHP.Text = "10"; break; } // 柴油无法仅用step来判断滑行检查是否已结束 if (ackParams.step >= 23 && ackParams.result != null && ackParams.result.Length > 0) { lblResult.Text = ackParams.result; if (ackParams.result.Contains("不")) { lblResult.BackColor = Color.Red; } _timer.Enabled = false; } }); } catch (ObjectDisposedException) { // 关闭窗口后仍有一定几率会进入主UI线程,此时访问界面元素会引发此异常,直接忽略即可 } } } } else { GetQYDynoLoadGlideCheckRealTimeDataAckParams ackParams = new GetQYDynoLoadGlideCheckRealTimeDataAckParams(); if (_dynoCmd.GetQYDynoLoadGlideCheckRealTimeDataCmd(ref ackParams, out string errMsg) && ackParams != null) { if (_timer != null && _timer.Enabled) { try { DataRow dr = _dtRTData.NewRow(); TimeSpan interval = DateTime.Now - _startTime; if (interval.TotalSeconds < 0.001) { interval = TimeSpan.Zero; } dr["TimeSN"] = interval.TotalSeconds.ToString("F1"); dr["Power"] = ackParams.power; dr["Speed"] = ackParams.speed; dr["TorqueF"] = ackParams.torquef; _dtRTData.Rows.Add(dr); _dtResult.Rows[0]["ACDT"] = ackParams.ACDT25_11kw; _dtResult.Rows[0]["滑行误差(%)"] = ackParams.Error25_11kw; _dtResult.Rows[1]["ACDT"] = ackParams.ACDT40_11kw; _dtResult.Rows[1]["滑行误差(%)"] = ackParams.Error40_11kw; Invoke((EventHandler) delegate { lblPower.Text = ackParams.power.ToString("F"); lblSpeed.Text = ackParams.speed.ToString("F"); lblTorqueF.Text = ackParams.torquef.ToString("F"); chart1.DataBind(); if (ackParams.result != null && ackParams.result.Length > 0) { lblResult.Text = ackParams.result; if (ackParams.result.Contains("不")) { lblResult.BackColor = Color.Red; } } }); // 汽油可以用step来判断滑行检查是否已结束 if (ackParams.step < 0) { _timer.Enabled = false; } } catch (ObjectDisposedException) { // 关闭窗口后仍有一定几率会进入主UI线程,此时访问界面元素会引发此异常,直接忽略即可 } } } } }