Создать событие таймера в c ++ / clr

Итак, я пытаюсь создать событие таймера (на этот раз в C ++ / clr), но я не знаю, как определить новое событие, вот что я получил:

namespace hook
{
public ref class Tick
{
private:
static System::Timers::Timer^ aTimer;

public:
event EventHandler^ OnTick;
int Interval;

Tick()
{
aTimer = gcnew System::Timers::Timer(Interval);
aTimer->Elapsed += gcnew ElapsedEventHandler(Tick::execute);
}

static void execute(Object^ source, ElapsedEventArgs^ e)
{
this->OnTick(this, new EventsArg()); // Wrong
}
};
}

0

Решение

Вы пытаетесь получить доступ к члену экземпляра (OnTick) из статического метода, который не может работать. Удалить статический Ключевое слово, чтобы получить:

 void execute(Object^ source, ElapsedEventArgs^ e)

Что требует, чтобы вы изменили код подписки на событие, вы должны создать делегат, который хранит этот:

 aTimer->Elapsed += gcnew ElapsedEventHandler(this, &Tick::execute);

Еще одна ошибка, вы неправильно написали EventArgs. Это настолько распространено, что у него есть предварительно приготовленный объект, возвращаемый Empty. Вырубает мусор:

 this->OnTick(this, EventArgs::Empty);

Следите за написанием кода, который просто дублирует исходный класс без добавления значения.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]