为什么我的自定义事件没有被解雇?

Cap*_*ard 0 c# events

我在做一个应用程序来记录用户活动和我有一对夫妇的自定义事件的问题,没有异常抛出,没有编译器错误出现,但是当我跑我的应用程序没有写入到控制台,这使我想起了事件根本不开火!我已经告诉事件如果弹出但没有任何反应会显示一条消息,我相信这证实了我的怀疑.

我不是C#或自定义事件的专家,所以任何和所有的帮助将非常感激=]

我的自定义事件的代码如下;

             Inactivity inact = new Inactivity();
             inact.Active += inactivity_Active;
            inact.Inactive += inactivity_Inactive;

     public void inactivity_Inactive(object sender, EventArgs e)
            {

            var logdata1=Inactivity.GetIdleTime();
            System.Diagnostics.Debug.WriteLine(logdata1);
            MessageBox.Show("Inactive");
        }

        public void inactivity_Active(object sender, EventArgs e)
        {

            var logdata2 = Inactivity.GetIdleTime();
            System.Diagnostics.Debug.WriteLine(logdata2);
            MessageBox.Show("Active");
        }
Run Code Online (Sandbox Code Playgroud)

这些是为了引发活动和非活动事件而要调用的方法

    public void OnInactive(EventArgs e)
    {
        EventHandler inactiveEvent = this.Inactive;
        if(inactiveEvent!=null)
        {
            inactiveEvent(this, e);
        }
    }


   public void OnActive(EventArgs e)
   {

       EventHandler inactiveEvent = this.Inactive;
       if (inactiveEvent != null)
       {
           inactiveEvent(this, e);
       }
       }
Run Code Online (Sandbox Code Playgroud)

Jan*_*aus 5

Inactivity inact = new Inactivity();
Run Code Online (Sandbox Code Playgroud)

这不是您定义事件的方式.您可以定义这样的事件:

public event EventHandler<EventArgs> Active;
public event EventHandler<EventArgs> Inactive;
Run Code Online (Sandbox Code Playgroud)

你通过编写/调用这些方法来引发这些事件:

protected virtual void OnActive(EventArgs e)
{
    EventHandler<EventArgs> active = Active;
    if (active != null)
    {
        active(this, e);
    }
}

protected virtual void OnInactive(EventArgs e)
{
    EventHandler<EventArgs> inactive = Inactive;
    if (inactive != null)
    {
        inactive(this, e);
    }
}
Run Code Online (Sandbox Code Playgroud)

您的事件处理方法是正确的.作为参考,我在这里重复了一遍:

public void inactivity_Inactive(object sender, EventArgs e)
{
    var logdata1=Inactivity.GetIdleTime();
    System.Diagnostics.Debug.WriteLine(logdata1);
    MessageBox.Show("Inactive");
}

public void inactivity_Active(object sender, EventArgs e)
{
    var logdata2 = Inactivity.GetIdleTime();
    System.Diagnostics.Debug.WriteLine(logdata2);
    MessageBox.Show("Active");
}
Run Code Online (Sandbox Code Playgroud)

您可以在使用此代码引发相应事件时注册要调用的代码,例如,您可以将其放入该类的构造函数中.

Active += inactivity_Active;
Inactive += inactivity_Inactive;
Run Code Online (Sandbox Code Playgroud)