System.Threading.Timer是线程
你要更新UI,需要使用委托

解决方案 »

  1.   

    或者你这种简单应用,不处理复杂或耗时逻辑,直接用Forms.Timer(或从工具箱里拖一个出来)就好,那个是委托给UI执行的,可以直接在回调函数里给文本框赋值
      

  2.   

    TimerCallback,不在创建计时器的线程上执行,而是在系统提供的 ThreadPool 线程上执行。 
    所以TimerCallback访问textBox1控件,是跨线程访问,是不允许的!
      

  3.   

    跨线程访问UI控件导致,使用 Control.Invoke
      

  4.   

    那么,用
               Console.Out.WriteLine(DateTime.Now + " " + DateTime.Now.Millisecond.ToString() + "timer in:");
    应该可以正常运行了。我试试
      

  5.   

    可以运行了。
    不过我发现,在  void Time_Elapsed(object sender)中设置断点,程序只有第一次运行到断点时停止下来,然后就不会在断点处停止了。
            void Time_Elapsed(object sender)
            {
                string n;
                n = num.ToString();
    //此处设置了断点,不过程序没有停止下来。      
          Console.Out.WriteLine(DateTime.Now + " " + DateTime.Now.Millisecond.ToString() +  n);
               //textBox1.Text = "n";//
               num++;
               timer.Change(Timeout.Infinite, 1000);
            }
      

  6.   

    timer.Change(Timeout.Infinite, 1000);
    之后重新执行一下timer.start试试