系统.计时器同步不工作
本文关键字:工作 同步 计时器 系统 | 更新日期: 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
。