我个人理解认为timer组件启动时会隐式开启一个线程
那么为什么timer组件更新界面的时候不会出现跨线程访问的问题?
还望各位指教,timer组件到底是如何运行的?是否在底层已经处理了回调了?

解决方案 »

  1.   

    timer组件启动时会隐式开启一个线程
    错。它只是注册了一个事件处理程序,和Command_Click一样。底层做死循环,如果是 WM_COMMAND,就调用 Command_Click,如果是 WM_TIMER,就调用定时器。
    而消息是Windows维护的。
    很明显,如果在Command里面编写一个耗费时间的过程,Timer就不会触发。
      

  2.   

    http://www.cnblogs.com/shang20017/archive/2009/03/16/1413798.htmlhttp://kb.cnblogs.com/a/1300428/你可以在窗体里输出当前线程的ID和在timer的回调方法中输出当前线程的ID就可以看到它们是一样的.
    Console.        Console.WriteLine(System.Threading.Thread.CurrentThread.ManagedThreadId.ToString());
      

  3.   

    NO,NO
    这要看是那个明明空间Timer吧!!!
    在Form下的是在主线程的
      

  4.   

    请问一下,设置timer的时间间隔是怎么弄的?可不可以控制系统发送WM_TIMER的频率啊?
      

  5.   

    Windows Timers 提供了和WinAPI一样的Timer 基于消息,仍然是单线程
    其他两个是是基于线程池的Thread Pool
    http://msdn.microsoft.com/zh-cn/library/tb9yt5e6.aspx