调试和运行结果不一致


一、项目场景:

上位机项目开发过程中,已经有了单发功能:上位机发送一条数据,再接收一条下位机回复的数据帧。在此基础上需要给上位机添加一个循环发送数据帧的功能,初步想法时使用for循环里面调用单发的功能去实现。
代码如下:

	for (int i = m_CurLineNo; i <= this.Tx_richTextBox.Lines.length; i++) {
		this.Btn_Send_Click(this, null);
	}

调试时可以正常的,ctrl + f5运行时不是严格的一发一收:
在这里插入图片描述


二、原因分析及解决:

开始以为是代码逻辑不对,发送过去后应该等接收到数据后再发送下一条,但调试时正常啊。考虑到整个收发处理流程是在定时器响应函数里,可能是定时器的调试和运行时的差异导致的。我的理解是单步调试时肯定比正常运行时走的慢,这时定时器这个外设不会停下的,它会自动每隔一段时间就调用响应函数。于是单步调试和运行时的代码执行逻辑是有差异的。

private void Timer_ReveiveTask_Tick(object sender, EventArgs e) {
	String error = m_Bussiness.GetError();
	if(error == "") { //系统未发生错误
		List<SF2ActionBase> actionList = m_Bussiness.ReceiveAction();
		foreach (SF2ActionBase action in actionList) {
			ReceiveAction(action as Action_Object);
		}
		m_Busiess.ContinueSendTask();
	}
}
	

经过尝试后,增加了时间间隔(延时加大)会缩小这个差异,运行就正常了。

this.Timer_UpdateTime.Interval = 100;
this.Timer_UpdateTime.Tick += new System.EventHandler(this.Timer_UpdateTime_Tick);

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值