日期:2014-05-19  浏览次数:20684 次

问个白痴问题,可否使用timer在一定程度上代替线程?
程序加载时需要执行一段代码,耗时较长,本来打算用线程,可是线程看的有点头大,想到用timer执行一个方法时,他好象也是多线程的,所以我现在的方法是

        窗体加载后将timer的enable设置为true,interval设置为1000,然后执行窗体的其他代码,而在timer中执行我定义的方法a,在方法a的一开始就将timer的enable设置为false,这样方法a只能执行一次,这样窗体的加载和方法a的执行不会互相干扰了,而且定义一个标志位flag,方法执行完了flag定为true,在某些需要a执行完了才能运行的代码前判断flag,如果是false就延时直到flag等于true才往下运行.

        不知道这样的方法好不好,会不会出现什么问题?

------解决方案--------------------
timer只能在父窗体上用,做循环很占用资源,而且timer严格意义上来说还是属于单线程,一旦和程序运行有冲突的话可能会出现瓶颈,达不到thread这种效果。
------解决方案--------------------
用timer的话,记时是在另一个线程,调用的程序还在主线程执行吧
------解决方案--------------------
为什么说可以用线程的就用线程而不用timer,是因为timer是一个线程,占cpu资源,多个timer就会造成cpu的响应时间导致不及时
------解决方案--------------------
不可以,定时器和你的主线程一起的。达不到多线程的性能
------解决方案--------------------
System.Windows.Forms.Timer只是依靠Form消息来判断循环的,并不是线程,其他的2个
System.Timers.Timer 和 System.Threading.Timer 则都等同于线程

我个人认为还是用线程池吧,用法还是比较简单的!
ThreadPool.QueueUserWorkItem
------解决方案--------------------
一定程度上可以,但是如果要讲效率那还是不要用了吧