我现在有一个服务。里面会执行2个事件。一个是每隔1秒执行事件A 一个是每隔5秒执行事件B  用2个timer控件去控制时间
但是现在遇到的问题就是始终只能执行一个事件 2个事件无法同时执行。求解决办法!!!!我要2个事件去同时执行。该怎么处理!
private void FormRun_Load(object sender, EventArgs e)
        {
            //Log.writeServiceLog("服务正常启动时间: " + DateTime.Now.ToString());
            Start();
            StartAG();
            
        }        public void Start()
        {
            Thread timer = new Thread(new ThreadStart(Timer));  //新建一个线程,该线程调用Timer()
            timer.Start();                               //启动线程
            Console.CursorVisible = false;   //隐藏光标
            Console.ReadKey(true);            //等待按任意键退出
            timer.Abort();                              //终止线程,用于停止秒表       
            
        }        public void StartAG()
        {
            //再次提醒
            Thread taskTimer = new Thread(new ThreadStart(TaskTimer));  //新建一个线程,该线程调用Timer()
            taskTimer.Start();                               //启动线程
            Console.CursorVisible = false;   //隐藏光标
            Console.ReadKey(true);            //等待按任意键退出
            taskTimer.Abort();           
        }        private void Timer()
        {
            while (true)
            {
                this.SynMessage();                               //显示秒表计数
                Thread.Sleep(1000);         //等待1秒后再执行Timer()刷新计数            }
        }
        private void TaskTimer()
        {
            while (true)
            {
                this.SynMessageAgain();                               //显示秒表计数
                Thread.Sleep(5000);         //等待5秒后再执行Timer()刷新计数            }
        }

解决方案 »

  1.   

    Start();
    StartAG();这两个函数返回都会杀掉线程
    当然不能同时执行
      

  2.   

        IsBackground = true;都挂在后台咯
      

  3.   

     public void Start()
            {
                Thread timer = new Thread(new ThreadStart(Timer));  //新建一个线程,该线程调用Timer()
                timer.Start();                               //启动线程
                Console.CursorVisible = false;   //隐藏光标
                Console.ReadKey(true);            //等待按任意键退出
                timer.Abort();                              //终止线程,用于停止秒表       
                
            }
    执行到Console.ReadKey(true);            //等待按任意键退出
    主线程被阻塞
    不按键无法继续,无法执行StartAG();线程taskTimer不启动
    按键timer.Abort()线程终止
    StartAG();可以执行线程taskTimer启动
    所以不会同时执行
      

  4.   


    Thread timer;
    Thread taskTimer ;
    private void FormRun_Load(object sender, EventArgs e)
            {
                //Log.writeServiceLog("服务正常启动时间: " + DateTime.Now.ToString());
                Start();
                StartAG();
                Console.ReadKey(true);            //等待按任意键退出
                timer.Abort();                              //终止线程,用于停止秒表    
                taskTimer.Abort();       
            }        public void Start()
            {
                timer = new Thread(new ThreadStart(Timer));  //新建一个线程,该线程调用Timer()
                timer.Start();                               //启动线程
                Console.CursorVisible = false;   //隐藏光标
                   
                
            }        public void StartAG()
            {
                //再次提醒
                taskTimer = new Thread(new ThreadStart(TaskTimer));  //新建一个线程,该线程调用Timer()
                taskTimer.Start();                               //启动线程
                Console.CursorVisible = false;   //隐藏光标
                    
            }        private void Timer()
            {
                while (true)
                {
                    this.SynMessage();                               //显示秒表计数
                    Thread.Sleep(1000);         //等待1秒后再执行Timer()刷新计数            }
            }
            private void TaskTimer()
            {
                while (true)
                {
                    this.SynMessageAgain();                               //显示秒表计数
                    Thread.Sleep(5000);         //等待5秒后再执行Timer()刷新计数            }
            }用Abort结束线程不是好习惯,因为你不知道执行到哪了。尽量让线程正常退出。
      

  5.   

    试了你这个方法 现在出现了新的问题 SQL 连接的问题 Start方法个StartAG 都会去底层执行连接数据库 这样就会提示连接未关闭!
      

  6.   

    两个线程,分别设置不同的间歇时间,这样就可以了。
    System.Threading