Господа коллеги (

), у меня проблема. Мне нужен таймер, который через заданное время проверяет определенную функцию. Но дело в том, что в эту функцию мне надо передать экземпляр этого таймера, чтобы в нужный момент выключить его. Заодно я передаю и экземпляр DateTime, чтобы каждый раз в функции не создавать новый объект.
Я переопределил EventArgs:
using System;
using System.Windows.Forms;
public class WorkingDayEventArgs: System.EventArgs
{
public DateTime dtnow;
public Timer waitForWorkingDayTimer;
public WorkingDayEventArgs(DateTime dtnow, Timer waitForWorkingDayTimer)
{
this.dtnow = dtnow;
this.waitForWorkingDayTimer = waitForWorkingDayTimer;
}
}
Добавил класс с делегатом:
using System;
using System.Windows.Forms;
public class WorkingDayEvent
{
public delegate void WorkingDayEventHandler(Object obj, WorkingDayEventArgs ea);
//вот тут вот меня большие сомнения терзают
public event EventHandler DayEvent;
public void WaitForWorkingDay(DateTime dtnow, Timer waitForWorkingDayTimer)
{
WorkingDayEventArgs workingDayArgs = new WorkingDayEventArgs(dtnow, waitForWorkingDayTimer);
DayEvent(this, workingDayArgs);
}
}
Структура программы получилась такова (в общих чертах):
...
бла-бла-бла, много кода
...
private void buttonStart_OnClick(object sender, System.EventArgs e)
{
WorkingDayEvent dayEvent = new WorkingDayEvent();
dayEvent.WaitForWorkingDay(dtnow, waitForWorkingDayTimer);
Timer waitForWorkingDayTimer = new Timer();
waitForWorkingDayTimer.Interval = 5000;
waitForWorkingDayTimer.Tick += new WorkingDayEvent.WorkingDayEventHandler(WaitForWorkingDayTest);
waitForWorkingDayTimer.Start();
}
//функция, которую мне надо вызывать через таймер каждые 5 сек.
private void WaitForWorkingDayTest(object obj, WorkingDayEventArgs ea)
{
ea.dtnow = DateTime.Now;
if(ea.dtnow.Hour > (AutoHitKernel.iWorkingDayEndHours - 1) || ea.dtnow.Hour < (AutoHitKernel.iWorkingDayBeginHours + 1))
{
}
else
{
WorkingDay();
//а для этого я как раз и тащу экземпляр таймера.
ea.waitForWorkingDayTimer.Stop();
}
}
...
бла-бла-бла, много кода
...
Но при попытке откомпилить получаю облом:
waitForWorkingDayTimer.Tick += new WorkingDayEvent.WorkingDayEventHandler(WaitForWorkingDayTest);
// MainForm.cs(340): Cannot implicitly convert type 'AutoHitNamespace.WorkingDayEvent.WorkingDayEventHandler' to 'System.EventHandler'
Я подозреваю, что как-то не так переопределил стандартный делегат EventHandler. Как сделать это правильно?