我在程序里放了2个timer控件,走的都是主线程,所以一个TIMEr里造成死循环 会造成整个程序无响应,怎么把Timer事件放到另一个线程中去 或者怎么实现2个异步线程

解决方案 »

  1.   

    不用timer, 用thread可以嗎?
      

  2.   

    建议你看看“三个定时器的史话”,就明白Timer了;
    可以自己写线程来定时触发,但不能直接更操作界面,否则会死;
      

  3.   

    你都说了Timer控件了,还哪来的异步?线程?
    有几个概念需要给你纠正一下
    1.什么是控件?控件就是一个更小的窗口,不是顶层窗口,放在某个容器中。
    2.控件如何工作?控件既然是一个更小的窗口自然是消息驱动的,依赖宿主的消息循环,所以,Timer控件实际上是中断发送消息实现的,而处理这些消息就和处理按钮按下的键盘、鼠标消息一样,是同步的,不过是有个中断定时的发送给你消息仅此而已,和你自己用手间隔的触发效果是一样的。
    3.异步,这个不一定就真是异步,真的异步就是多线程,假的异步就是延迟执行,例如常说的异步委托,Control.BeginInvoke,注意,我写的是Control.BeginInvoke,不是Delegate.BeginInvoke。控件的BeginInvoke只是PostMessage实现的,延迟执行而已,委托的BeginInvoke是真的异步。线程还是线程池,这个没了解过。
    4.线程,一个运行中的方法就是线程,没什么误区,不解释,你看google和msdn吧。
      

  4.   

    谢谢大家,lianshaohua给我的提示,现在用线程做,不用TIMER控件,已经可以实现了
      

  5.   

    用了线程了,还用什么的timer。