如题,外界有N台可以串口通讯的设备,为了保证数据的实时性,没有采用轮询方式,采用了听人介绍的多线程方式,大约程序运行了20天左右的样子,程序就假死了,也不报错,也不采集数据了,只有关闭重新开启程序后这几个线程又能正常工作。我想请问是这个是由于多线程造成的问题,还是串口的采集没有处理好造成的?谢谢!timerDelegate = new TimerCallback(arr_lclaCommData[i].Doword);
arr_stateTimer[i] = new System.Threading.Timer(timerDelegate, autoEvent, 1000, 10000);这是新建时钟线程的代码,我是在程序开启时,通过一个for循环找出数据库中有多少台设备,从而建立多少个像以上那样的时钟线程。而串口通讯的代码则是学习 http://blog.csdn.net/wuyazhe/article/details/5598945

解决方案 »

  1.   

    不会是因为线程开太多报错,肯定是因为你的处理程序中出错导致,多加点trycatch 记录
      

  2.   

    综各位所说,System.Threading.Timer 线程阻塞了怎么判断 怎么解决呢? 怎么防止阻塞啊?2、void comm_ErrorReceived(object sender, SerialErrorReceivedEventArgs e)
            {
                if (!Directory.Exists("ErrLog"))
                {
                    Directory.CreateDirectory("ErrLog");
                }
                using (StreamWriter sw = new StreamWriter(@"ErrLog\ErrLog.txt", true))
                {
                    sw.WriteLine("来自:错误事件的异常!" + e. DateTime.Now.ToString());
                    sw.WriteLine("---------------------------------------------------------");
                    sw.Close();
                }我在错误事件里写了日志,发现有错误,那通常在这个事件里出错了怎么处理串口,只有重新开启com就行吗?