public void StartSelfcheck(bool bStart) { if (bStart) { // 现在的测功机服务端软件使用的“DeviceVirtual.dll”虚拟流量计驱动需要发两次开始命令才能接收实时数据 if (!_dynoCmd.StartFlowmeterPrepareCmd(false, false, out string errMsg)) { MessageBox.Show("执行开始流量计准备命令失败", "执行命令出错", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { for (int i = 0; i < 3; i++) { GetFlowmeterPrepareRealTimeDataAckParams ackParams = new GetFlowmeterPrepareRealTimeDataAckParams(); if (_dynoCmd.GetFlowmeterPrepareRealTimeDataCmd(true, false, ref ackParams, out errMsg) || ackParams != null || ackParams.step >= 0 || ackParams.msg != "手动终止检测") { if (!_dynoCmd.StartFlowmeterPrepareCmd(false, false, out errMsg)) { MessageBox.Show("执行开始流量计准备命令失败", "执行命令出错", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { _timer.Enabled = true; break; } } } } } else { _timer.Enabled = false; Thread.Sleep(_mainCfg.RealtimeInterval); if (!_dynoCmd.StartFlowmeterPrepareCmd(true, true, out string errMsg) && errMsg != "ati >= 0") { MessageBox.Show("执行停止流量计准备命令失败", "执行命令出错", MessageBoxButtons.OK, MessageBoxIcon.Error); } else if (errMsg.Length > 0) { if (errMsg == "ati >= 0") { lblMsg.Text = "已手动停止流量计自检"; } else if (errMsg != "OK") { lblMsg.Text = errMsg; } } } }