我现在想在线程中启动timer控件,我在线程用timer.enabled=true  或者   timer.start()启动计时器,调试的时候运行了这句代码,但是timer的tick事件并没有发生,这是怎么回事啊?

解决方案 »

  1.   

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    using System.Threading;namespace WindowsFormsApplication10
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }        public void SetTimer()
            {
                timer1.Enabled=true;
            }        public void ThreadMethod()
            {
                while(true)
                {
                    Thread.Sleep(10 * 1000);
                    SetTimer();
                }
            }        private Thread test_t;        private void Start()
            {
                test_t = new Thread(ThreadMethod);
                test_t.Start();
            }        private void Form1_Load(object sender, EventArgs e)
            {
                Start();
                //SetTimer();
            }        private void timer1_Tick(object sender, EventArgs e)
            {
                button1.Visible = !button1.Visible;
            }        private void button2_Click(object sender, EventArgs e)
            {
                if(timer1.Enabled==true)
                {
                    MessageBox.Show("已经启动计时器");
                }
                else
                {
                    MessageBox.Show("没有启动计时器");
                }
            }
        }
    }
      

  2.   

    你用的是System.Windows.Forms.Timer...这个是UI线程的计时器,不能跨线程操作,必须在窗口中使用...使用委托...
      

  3.   

    这就是我写的测试代码,在form  load的时候启动线程——也就是启动计时器,启动计时器后验证单击button2,确实是启动了,但是如果启动了按照tick事件处理程序button1应该在闪
      

  4.   

    楼主要明白 timer本身就是一个线程 不明白你为啥还要写个 Thread.Sleep();
      

  5.   

    你用的是System.Windows.Forms.Timer...这个是UI线程的计时器,不能跨线程操作,必须在窗口中使用...使用委托...
      

  6.   


    System.Timers.Timer timerSend = new System.Timers.Timer();
                timerSend.Interval = ConstMember.SEND_TIME;
                timerSend.Enabled = true;
                timerSend.AutoReset = true;
                timerSend.Elapsed += new System.Timers.ElapsedEventHandler(timerSend_Elapsed);
                timerSend.Start();
            }
            public void timerSend_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
            {
                SendMethod SM = new SendMethod();
                SM.sendSms();
            }