线程实现间隔时间运行一次

之前用的System.Timers.Timer myTimer=new System.Timers.Timer();  的定时器,不知道什么鬼,跑一会停一会。有瑕疵;

后来心一横就改用线程了,因为从原理上将,定时器也是个线程,只是封装了一个定时功能。

定义全局变量的线程:

Thread LogThread;

在构造函数中初始化:

      LogThread = new Thread(new ThreadStart(timer1_Tick));
             LogThread.IsBackground = true;
             if (bStop == true)
             {
                 LogThread.Start();//起线程  
             } 

下面是线程执行的操作:

   private void timer1_Tick()
        {//每隔1分钟如果机器当前空闲的话,检查与服务器是否连接  
            
            while (true)
            {
                bStop = false;
                if (!BClickTest.IsStart)
                ClientSendMsg("ImFree");//告知服务器,我空闲
                //如果未连接则请求连接服务器
                if(!connectedflag)  
                   this.Connection();                
                System.Threading.Thread.Sleep(10000);
            }           
        }


这时候就实现了每个10秒执行一次线程操作,但是我的功能还需要实现自动控制线程的装死和复活:

             if (!string.IsNullOrWhiteSpace(strRecMsg) && strRecMsg == "end")
                    {                        
                        LogThread.Suspend(); 
                        myTimer.Enabled = false;
                        LogHelper.WriteLog("先别干活了。");
                    }
                    else if (!string.IsNullOrWhiteSpace(strRecMsg) && strRecMsg == "start")
                    {
                        if (LogThread.ThreadState.ToString().Contains("Suspended"))
                        { LogThread.Resume(); }
                        myTimer.Enabled = true;
                        LogHelper.WriteLog("开始干活了没?" );
                    }

这样改过之后就没啥问题了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值