我已经有运行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;
tmr1tmr2是否将在不同的线程上运行,以便DoWork1DoWork2可以同时(即,同时)运行?

谢谢!

最佳答案

这是不正确的。

当心。 System.Timers.Timer将为每个Elapsed事件启动一个新线程。当您的Elapsed事件处理程序花费太长时间时,您会遇到麻烦。即使之前的调用尚未完成,您的处理程序也会在另一个线程上再次被调用。这往往会产生难以诊断的错误。您可以通过将AutoReset属性设置为false来避免某些事情。另外,请务必在事件处理程序中使用try/catch,异常会被吞下而不会进行诊断。

10-08 03:06