问大神们两个有关问题,一个是如何判断线程定时器有没有刷新的有关问题,一个是事件执行的有关问题

问大神们两个问题,一个是怎么判断线程定时器有没有刷新的问题,一个是事件执行的问题
问各位大神们两个问题:
问题前提:我要做个和每个检测站联网的程序,我使用的是多线程,一个检测站一个线程,每个检测站就是在label里面刷新数据,10s刷新一次。需要做的是让每个检测站相互独立,一个检测数据卡掉不会影响其他的检测站,一个检测站数据3分钟没有刷新就重启这个线程,如图问大神们两个有关问题,一个是如何判断线程定时器有没有刷新的有关问题,一个是事件执行的有关问题
第一个问题是:
我现在写了个监控程序(在别人帮助下),只是判断了超过三分钟,但是没有判断三分钟是否刷新线程,所以想问大神们怎么判断我这个线程三分钟是否刷新了,每个线程里面都有一个timer定时器,10s刷新一次。
代码如下:
定义:

Dictionary<int, DateTime> source = new Dictionary<int, DateTime>();
private TimerCallback ti;


FORM的load程序

private void frmMain_Load(object sender, EventArgs e)
        {
            EQ2008Config.GetSection();
            string strpath = AppDomain.CurrentDomain.BaseDirectory + "\\StationConfig.xml";
            XmlDocument doc = new XmlDocument();//初始化一个xml实例
            doc.Load(strpath);//导入指定的xml文件
            XmlNode no = doc.SelectSingleNode("StationList");//指定一个节点
            XmlNodeList listnode = no.SelectNodes("StationData");//获取同名同级别"stationdata"节点集合
            
            ti = new TimerCallback(ShowDataToScreenStation);
            //System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
           
            foreach (XmlNode node in listnode)//遍历所有的stationdata节点
            { 
                weituo = new WeiTuo<XmlNode>(Set_labelText);
                StartThread(node);
            }
         //下面是监控程序  
            Thread jiankong = new Thread(()=>{
               while (true) 
               {
                   foreach(var item in source)
                   {
                       if((DateTime.Now - item.Value)>TimeSpan.FromSeconds(180))//判断超出三分钟怎么判断计时器是否刷新呢????
                       {
                           if (sf_event != null) 
                               this.sf_event(item.Key);
                       }
                   }
                   Thread.Sleep(5000);//监控线程5秒执行一次
               }
            });
            jiankong.IsBackground = true;
            jiankong.Start();
}


生成label的函数,里面有定时器,10s刷新一次数据

public void Set_labelText(XmlNode strText) 
        {
            this.Invoke((Action<XmlNode>)delegate(XmlNode node)
            {
                StationData stationData = new StationData(node);
                source.Add(stationData.CardFlagID, DateTime.Now);
                //stationData.IsShow = false;
                Program.listStationList.Add(stationData);
                this.flowLayoutPanel1.BackColor = Color.Orange;