自己做了个简单的往串口不断的发送命令软件,开始挂机时是好的,
可是挂了几天之后(也就是前天)就出现白屏死锁了,还弹出线程未开始,把弹出的框点击继续。(这时候还是白屏)不管它继续挂着昨天又好了,过了一天今早来看又出现白屏死锁。这是怎么回事啊!
已经连续挂了一个多星期了,就这两天出现这样的情况。还有另外一台机子也挂着这个软件只是时间没这个长,目前没有这个情况。
我程序里用了一个定时器,定时发送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();}

解决方案 »

  1.   

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

  2.   

    send++;//發送命令個數overflow ????????
      

  3.   

    alCommand 是ArayList里面保存了几条发送命令。
    Timer1.Interval=alCommand.Count*spaceInt
    定时器事件Tick()
    {
        for (int k = 0; k < alCommand.Count; k++)
          {
               Thread.Sleep(spaceInt);//spaceInt表示每个命令之间间隔秒数
                 string command = sp.strToAsc(alCommand[k].ToString());
               serialport.WriteLine(command);
               send++;//发送命令个数
      }
    如果我这样写的话,发送完一组命令(alCommad.count=2)send=2,进入DataReceived事件incept=1之后再=2;而我界面上就会显示发送命令个数2、4、6、8、10 (一组一组的发送累加)
                       接收个数1、2、3、4、5、6、7、8、9  当我点击关闭按钮时发送个数!=接收个数,而实际上我界面上要的是发送个数 1、2、3、4、5、6、7、8、9、10
                          接收个数 1、2、3、4、5、6、7、8、9、10(之前的代码就是这样显示的)还有一个问题就是挂机时如果把窗体最小化,再点击,很难还原,要点击好多下或者过一段时间才能恢复。