日期:2014-05-18  浏览次数:21054 次

C# 挂机 串口不断的发送命令(轮循)每个命令之间间隔50毫秒
自己做了个简单的往串口不断的发送命令软件,开始挂机时是好的,
可是挂了几天之后(也就是前天)就出现白屏死锁了,还弹出线程未开始,把弹出的框点击继续。(这时候还是白屏)不管它继续挂着昨天又好了,过了一天今早来看又出现白屏死锁。这是怎么回事啊!
已经连续挂了一个多星期了,就这两天出现这样的情况。还有另外一台机子也挂着这个软件只是时间没这个长,目前没有这个情况。
我程序里用了一个定时器,定时发送alCommadl里的命令
alCommand 是ArayList里面保存了几条发送命令。
Timer1.Interval=alCommand.Count*spaceInt
void sendRce()
{
  for (int k = 0; k < alCommand.Count; k++)
  {
  Thread.Sleep(spaceInt);//spaceInt表示每个命令之间间隔秒数
  string command = sp.strToAsc(alCommand[k].ToString());
  serialport.WriteLine(command);
  send++;//发送命令个数
  }
}

定时器事件Tick()
{
  ThreadStart myTs = new ThreadStart(sendRce);//线程调用sendRce方法发送数据包
  Thread mytd = new Thread(myTs);
  mytd.Start();

}

------解决方案--------------------
你每次都创建一个新线程,这些线程可能会产生冲突的,比如多个线程执行serialport.WriteLine,还有对sp.strToAsc(alCommand[k]的访问,你还是做好同步吧,而且你为什么要搞多个线程呢,一个线程就行了,里面循环处理命令