c#计时器不工作啊。
按钮触发 loopSend查找联系人列表循环发送信息,发送前判断 com_bz为false。 这个标示位是每次ComWrite后至真,同时启动计时器,当计时器到设定时间2000后 com_bz至false。
可是测试发现ComWrite时并没有间隔。 每条发送只有几十毫秒。每次执行for循环前com_bz都是false。 新人初学,求教。
private void ComWrite(string num, string message)//写入串口
{
if (serialPort1.IsOpen)
{
serialPort1.Write(num + message);
LoopSendDelegate listboxView2_ =(x,y) => {
listBox2.Items.Add(x + y);
};//委托执行,显示发送报文
BeginInvoke(listboxView2_, DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss:fff")+" => "+ num, message);
com_bz = true;//标志位至1
timer2.Start();//开始计时
serialPort1.DiscardOutBuffer();//发送后丢弃缓存区数据
}
}
void timer2_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
this.timer2.Stop();
com_bz = false ;
}
private void loopSend(object message)//发送消息
{
DataTable dt = db.sqlselect("select* from 联系人 ","联系人").Tables[0];
LoopSendDelegate send_ = new LoopSendDelegate(ComWrite);
for (int i = 0; i <= dt.Rows.Count - 1 && !com_bz ; i++)
{
BeginInvoke(send_, new object[] { dt.Rows[i][0].ToString(), message });
}
}