如果程序忙,则system.threading.timer计时器有可能停止工作。

解决方案 »

  1.   

    没有抛出异常,所有代码都在try-catch中,而且为了确定他有没有执行我在方法中添加了标记,每次执行该方法都先把标记符号写入文本,但是问题时段没有标记文字,其它时段正常
      

  2.   

    都放在try catch里都没捕捉到异常?
      

  3.   

    或许可以试试把代码放在Windows Service里然后部署看看会不会出错。
      

  4.   

    timer使用的也是线程池中的线程吧,会不会是这样的问题,线程池中的线程被占用完了,导致timer_elasped事件不能执行
      

  5.   

    只要在使用 Timer,就必须保留对它的引用。 对于任何托管对象,如果没有对 Timer 的引用,计时器会被垃圾回收。 即使 Timer 仍处在活动状态,也会被回收。是不是被回收了?
      

  6.   

    什么意思?怎样保留对它的引用?什么情况下才会失去对timer的引用?
      

  7.   


            void timerScreen_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
            {
                try
                {
                    //临时保存要写入文件的文本
                    string strText = string.Empty;
                    lock (syn)//syn是个只读的object类型实例
                    {
                        strText = sbData.ToString();//sbData是stringbulider类型实例,接受到得数据放入sbData
                        sbData.Remove(0, sbData.Length);
                    }                if (strText.Length != 0)
                    {
                        if (XmlControl.ReadXML("savealldata") == "1")
                        {
                            //保存原始数据,每小时1个文件
                            File.AppendAllText(string.Format("{0}{1}.hero", Application.StartupPath + "\\DataPacket\\AllData\\", DateTime.Now.ToString("yyyy-MM-dd HH")), strText);
                        }
                        if (XmlControl.ReadXML("savetemp") == "1")
                        {
                            //保存原始数据到临时文件,供入库程序使用
                            File.AppendAllText(string.Format("{0}{1}.hero", Application.StartupPath + "\\DataPacket\\AllData\\temp\\", DateTime.Now.ToString("yyyy-MM-dd HH mm ss")), strText);
                        }                }                lock (syn)
                    {
                        strText = controlData.ToString();//controlData是stringbulider类型实例,接受到得交互数据放入controlData
                        controlData.Remove(0, controlData.Length);
                    }                if (strText.Length != 0)
                    {
                        if (XmlControl.ReadXML("savetemp") == "1")
                        {
                            File.AppendAllText(string.Format("{0}{1}.hero", Application.StartupPath + "\\DataPacket\\交互命令\\", DateTime.Now.ToString("yyyy-MM-dd HH mm ss")), strText);
                        }
                    }
                }
                catch (Exception ex)
                {
                    log.Error(ex);
                }
                txtContent.Text = "";
                log.Error("刷屏标记");//将“标记”写入日志用来检测事件是否执行
            }
      

  8.   

    会不会是lock (syn)//syn是个只读的object类型实例
     这地方有问题。直觉感应。供参考