解决方案 »

  1.   

    多线程里有
    System.Threading.Timer代替控件Timer
      

  2.   

    或者你把Timer_Tick事件里的代码用多线程处理,这有Timer控件就在多线程外了
      

  3.   

    再或者你多线程要用委托来处理,这有控件Timer就可以在多线程里访问了以上三个方法你任选一个
      

  4.   

    System.Timers.Timer ti = new System.Timers.Timer();
    ti.Elapsed += new ElapsedEventHandler(this.ti_Elapsed);
    private void ti_Elapsed(object sender, ElapsedEventArgs e)
            {
                tin.Interval = 1000;     //时间间隔
    //定时启动事件        }
     private void Form1_Load(object sender, EventArgs e)
            {
                tin.Interval = 1000;
                tin.Enabled = true;
    }
    从没卡过
      

  5.   


    这是最直接的,只是会发生一种情况,要考虑到:
    耗时操作的时间不能大于定时器的间隔,也就是说定时器触发时,前面的耗时操作必须完成,不然就重复。
    必须对这种情况做出选择和处理。间隔问题没有关系,在启动耗时操作时,把定时器关掉,等耗时操作完成,再启动定时器,那样耗时操作之间时间是固定的,而耗时操作时间随意。这个是一个解决办法,但是它违背了定时器原本的需求:间隔xxxxx毫秒触发一次。
     这样子操作,每次间隔时间=tin.Interval+操作耗时。后者是不确定的。允许这样的需求就可以,否则不行。