Проблема с переопределением EventArgs
От: Дмитрий Осипов Россия  
Дата: 06.09.05 00:11
Оценка:
Господа коллеги ( ), у меня проблема. Мне нужен таймер, который через заданное время проверяет определенную функцию. Но дело в том, что в эту функцию мне надо передать экземпляр этого таймера, чтобы в нужный момент выключить его. Заодно я передаю и экземпляр 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. Как сделать это правильно?
Hello World!
------------------------------
17 Error(s) 37 Warning(s)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.