0

所以,我正在尝试创建一个计时器事件(这次在 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
        }
    };
}
4

1 回答 1

0

您正在尝试从静态方法访问实例成员 (OnTick),但该方法无法正常工作。去掉static关键字得到:

 void execute(Object^ source, ElapsedEventArgs^ e)

这需要您更改事件订阅代码,您必须创建一个存储的委托:

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

还有一个错误,你拼错了 EventArgs。传递是很常见的,它有一个预先煮好的对象,由 Empty 返回。减少垃圾:

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

注意编写只是复制原始类而不增加价值的代码。

于 2012-09-17T21:32:19.753 回答