我已经有运行System.Timers.Timer的Windows服务,该服务可以完成特定工作。但是,我希望某些作品可以同时运行,但使用不同的线程。
有人告诉我创建一个不同的System.Timers.Timer实例。这样对吗?这种方式可以并行运行吗?
例如:
System.Timers.Timer tmr1 = new System.Timers.Timer();
tmr1.Elapsed += new ElapsedEventHandler(DoWork1);
tmr1.Interval = 5000;
System.Timers.Timer tmr2 = new System.Timers.Timer();
tmr2.Elapsed += new ElapsedEventHandler(DoWork2);
tmr2.Interval = 5000;
tmr1
和tmr2
是否将在不同的线程上运行,以便DoWork1
和DoWork2
可以同时(即,同时)运行?谢谢!
最佳答案
这是不正确的。
当心。 System.Timers.Timer将为每个Elapsed事件启动一个新线程。当您的Elapsed事件处理程序花费太长时间时,您会遇到麻烦。即使之前的调用尚未完成,您的处理程序也会在另一个线程上再次被调用。这往往会产生难以诊断的错误。您可以通过将AutoReset属性设置为false来避免某些事情。另外,请务必在事件处理程序中使用try/catch,异常会被吞下而不会进行诊断。