System.Timer同步无法正常工作

时间:2014-10-17 11:15:43

标签: c# asp.net web-services timer windows-services

我创建了一个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;
                }
        }

1 个答案:

答案 0 :(得分:3)

尝试将AutoReset设置为false。

这意味着计时器将触发一次,然后再次触发,直到您再次手动启动它,这可以在您的网络服务呼叫后执行。

例如:

    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