急需现打开一个串口即开始每隔5秒向串口发送数据

需要现打开一个串口即开始每隔5秒向串口发送数据!
如题,问题是串口的数量不固定。
1、以下是取得串口列表并打开。
 while (myodr.Read())//串口所接设备数量由后台数据库配置
                    {
                        ComportOperateClass.ExSerialPort sp = new ExSerialPort();//自定义的SerialPort的扩展                    
                        //初始化SP的相关属性
                        sp.MaxSecond = DateTime.Now.AddSeconds(-10);
                        sp.errorStart = 0;
                        sp.yesRec = 1;
                        sp.errorEnd = -1;
                        try
                        {
                            if (!sp.IsOpen)
                            {
                                sp.Open();
                                spList.Add(sp);                                
                                StartWriteCom(sp);//开始5秒一次写数据                                
                            }
                        }
                        catch
                        {
                            nolinecom += sp.PortName.Trim() + " | ";
                        }
                    }


 Timer InitialModuleTimer;
  //StartWriteCom实现
 private void StartWriteCom(ExSerialPort esp)
       {           
           int time = FileManager.GET_queryintervaltime();//取得写数据的间隔时间
           if (time <= -1)
               throw new Exception("配置文件出错!来自参数:InitialModuleTimer");
           else
           {
               lock (this)
               {
                   InitialModuleTimer = new Timer(new TimerCallback(WriteDataToCom), esp, 0, time);
               }
           
           }
       }
//writeDataToCom略去代码,
问题:这种方式处理后所有串口打开后只有一个串口能正常完成任务,其它的都只是收到几条数据后停止了。应该是InitialModuleTimer,导致的。不知怎样改才好?(TImer,是Thread.Timer)
------解决思路----------------------
看不懂你这是什么逻辑
你每个代码都只放个片段,而且前后都没有注释,根本不知道上面的循环和下面的非循环,到底在哪执行的

而且也不说清楚是自动打开所有的串口发数据,还是人工打开串口,然后自动发数据

你说你用了timer,回调函数呢,用了timer回调函数里不放代码,这用了跟没用有啥区别
------解决思路----------------------
InitialModuleTimer = new Timer(new TimerCallback(WriteDataToCom), esp, 0, time);
这是timer的定义吗
其实你可以在timer里循环给每个串口发数据,而不是每个串口都定义一个timer
------解决思路----------------------
InitialModuleTimer = new Timer(new TimerCallback(WriteDataToCom), esp, 0, time);
用个全局List<InitialModuleTimer>把它存起来,否则可能会被GC给回收了(已经没有地方引用它了)