系统.计时器同步不工作

本文关键字:工作 同步 计时器 系统 | 更新日期: 2023-09-27 18:26:56

我创建了一个windows服务,它将每隔T个时间间隔触发一个事件。此事件将使用web服务并调用其web方法。这个windows服务不知道web方法需要多长时间才能完成执行。

我看到的是,当间隔结束时,web方法的多个实例正在运行。我正在使用计数器,但它不起作用。我不希望web方法执行重叠。

    public partial class AutoAllocation: ServiceBase
    {
        private Timer timer = null;
        private bool runningCounter=false;
        public AutoAllocation()
        {
            InitializeComponent();
        }
 protected override void OnStart(string[] args)
        {
            timer = new Timer();
            string timerInterval = ConfigurationManager.AppSettings["TimeInterval"];
            timer.Interval = Convert.ToDouble(timerInterval);
            timer.Elapsed += new System.Timers.ElapsedEventHandler(this.TimerTick);
            timer.Enabled = true;            
        }
        private void TimerTick(object sender, ElapsedEventArgs e)
        {
            if (runningCounter == false)
            {
                runningCounter = true;
                EmployeeManagementService resourceMgmt = new EmployeeManagementService ();
                resourceMgmt.AutoAllocateSalary();
                runningCounter = false;
                }
        }

系统.计时器同步不工作

尝试将"自动重置"设置为false。

这意味着计时器将启动一次,在您再次手动启动之前不会再次启动,这可以在您的Web服务调用后进行。

例如:

    protected override void OnStart(string[] args)
    {           
        string timerInterval = ConfigurationManager.AppSettings["TimeInterval"];
        timer = new Timer();
        timer.AutoReset = false;
        timer.Interval = Convert.ToDouble(timerInterval);
        timer.Elapsed += new System.Timers.ElapsedEventHandler(this.TimerTick);
        timer.Start();          
    }
    private void TimerTick(object sender, ElapsedEventArgs e)
    {
        EmployeeManagementService resourceMgmt = new EmployeeManagementService ();
        resourceMgmt.AutoAllocateSalary();
        ((Timer)sender).Start();
    }

这将阻止任何重叠的呼叫,这可能就是这里正在发生的事情。

还要记住,间隔以毫秒为单位,因此如果您提供秒数,请确保其*1000