Windows服务中的多个计时器无法正常工作

时间:2015-04-30 11:01:29

标签: c# timer windows-services

我的Windows服务中有2个不同的计时器,每个计时器每隔5秒运行一次,但它们都没有同时运行。

我的日志简化日志如下所示

11:49:00 : Timer1
11:49:05 : Timer1
11:49:10 : Timer1
11:49:15 : Timer1
11:49:20 : Timer1
11:49:25 : Timer1
11:49:30 : Timer1
11:49:35 : Timer1
11:49:48 : Timer2
11:49:53 : Timer2
11:49:58 : Timer2

这继续只有一个被激活5秒的正确时间然后另一个被激活。我希望他们两个都能跑。

我知道你会问“为什么不把它们放在同一个计时器里?”但我会添加多个计时器,这些事件的时间可能会改变,所以我真的很想解决这个问题。

这是我的代码,

public partial class Service1 : ServiceBase
{
    public Service1()
    {
        InitializeComponent();
    }

    protected override void OnStart(string[] args)
    {
        //Read or Create xml file to get necessary settings
        SerializeIformBuilder();

        //Checks for any user changes that may have occurred
        var manageUsers = new App.BLL.ManageUsers();

        System.Timers.Timer CreateNewUserTimer = new System.Timers.Timer();

        System.Timers.Timer PasswordUpdateTimer = new System.Timers.Timer();

        //Create Timer interval events
        CreateNewUserTimer.Elapsed += new System.Timers.ElapsedEventHandler(manageUsers.TimedEvent_CreateNewUsers);
        CreateNewUserTimer.Interval = 5000; //Once every 5 seconds
        CreateNewUserTimer.Enabled = true;

        PasswordUpdateTimer.Elapsed += new System.Timers.ElapsedEventHandler(manageUsers.TimedEvent_PasswordUpdate);
        PasswordUpdateTimer.Interval = 5000; //Once every 5 seconds
        PasswordUpdateTimer.Enabled = true;

    }

1 个答案:

答案 0 :(得分:0)

Interval的{​​{1}}实际上并未得到保证,就像您无法依靠Timer正好完全 5秒一样。

如果两个代表都需要在同一时间执行,那么您需要实现自己的特殊计时器,例如:一个持有多个代表并知道其执行间隔的文件。

简化为:

Thread.Sleep(5000)