解决方案 »

  1.   

    如果是WinForms的Timer,需要用Invoke异步让UI执行。
      

  2.   

    对就是WinForms的控件,该怎么操作?
      

  3.   

    this.Invoke(() => { timer1.Stop(); });
      

  4.   

    private void timer_Tick(object sender, EventArgs e)
    {
        timer.Stop();
        if (Thread == null)
        {
            Thread = new System.Threading.Thread(DownloadInfo);
            Thread.Start();
        }
        else
        {
            Thread.Abort();
            Thread = new System.Threading.Thread(DownloadInfo);
            Thread.Start();
        }
    }
    private void DownloadInfo()
    {
        System.Threading.Thread.Sleep(10000);//相当于函数执行了十秒
        timer.Start();//这次Start不能触发Tick
      

  5.   


            System.Timers.Timer timer;
            public void TimeTest()
            {
                timer = new System.Timers.Timer();
                timer.Interval = 1000;
                timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
                timer.Start();
                Console.ReadLine();
            }        void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
            {
                Console.WriteLine("timer 停止啦");
                Thread t = new Thread(new ThreadStart(() => { Thread.Sleep(1000); timer.Start(); Console.WriteLine("timer 启动啦"); }));
                t.Start();
                timer.Stop();
            }
    测试可以。
      

  6.   

    this.Invoke(() => { timer.Start(); });报错了:
      

  7.   

    this.Invoke(new Action(() => { timer.Start(); }));
      

  8.   

    使用这个System.Timers.Timer就没问题,谢谢各位大神
      

  9.   

    可以的
    在你建的线程中使用this.Invoke(
                             (MethodInvoker)delegate
                             {
    timer1.Start();
                             });
    另外也可以在构造函数中写上
    CheckForIllegalCrossThreadCalls=false;来取消线程安全检测
      

  10.   

    this.Invoke(new MethodInvoker(() => { timer1.Start(); }));
      

  11.   

    http://www.cnblogs.com/yelaiju/archive/2010/09/16/1827691.html