Итак, я пытаюсь создать событие таймера (на этот раз в 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
}
};
}
Вы пытаетесь получить доступ к члену экземпляра (OnTick) из статического метода, который не может работать. Удалить статический Ключевое слово, чтобы получить:
void execute(Object^ source, ElapsedEventArgs^ e)
Что требует, чтобы вы изменили код подписки на событие, вы должны создать делегат, который хранит этот:
aTimer->Elapsed += gcnew ElapsedEventHandler(this, &Tick::execute);
Еще одна ошибка, вы неправильно написали EventArgs. Это настолько распространено, что у него есть предварительно приготовленный объект, возвращаемый Empty. Вырубает мусор:
this->OnTick(this, EventArgs::Empty);
Следите за написанием кода, который просто дублирует исходный класс без добавления значения.
Других решений пока нет …