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

2021-04-23
线程实现间隔时间运行一次

从原理上将,定时器也是个线程,只是封装了一个定时功能。


定义全局变量的线程:


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("开始干活了没?" );

                    }

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