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