事件始终为 Null,因此无法处理



我有 3 个类,一个类触发事件,另一个类调用事件处理程序发送方,最后最后一个类接收事件。然而,发送方类中的事件处理程序总是null的,因此接收方从不处理事件。我无法弄清楚为什么它null,因为我将其分配为如下所示的StartEventHandler

我尝试输入调试语句以查看为什么处理程序从未运行过,并发现它永远不会到达 C 类。

头等舱触发事件:

Class A {
    public void Button_Click(object sender, RoutedEventArgs e)
    {            
        B senders = new B();
        senders.OnPageSwap(new StartEventArgs());
    }
}

第二类是发件人

public delegate void StartEventHandler(object sender, StartEventArgs e);
public class B
{
    public event StartEventHandler PageSwap;
    public virtual void OnPageSwap(StartEventArgs e)
    {
        Console.WriteLine("Entered PageSwapSender");
        if(PageSwap != null) PageSwap(this, e);
    }
}

三等是接收者

Class C {
    B sender = new B();
    void Connect()
    {
        sender.PageSwap += new StartEventHandler(this.sender_PageSwap);
        Console.WriteLine("Entered Connect");
    }
    private void sender_PageSwap(object sender, StartEventArgs e)
    {
        Console.WriteLine("Entered Handler");
    }
}

谁能告诉我为什么class B中的PageSwap总是null因此永远不会运行PageSwap(this, e).

代码的问题在于您正在实例化类B的两个单独实例。A您尝试在B的一个实例上引发事件。C您正在尝试处理使用 B 的不同实例引发的事件。

似乎您试图通过在 C 中创建 Connect 方法来做正确的事情,但这是您应该将现有的 B 实例传递给 C 的地方。

如果你像这样编写代码,它就会起作用:

class A
{   
    public void Button_Click(object sender, RoutedEventArgs e)
    {
        B senders = new B();
        C c = new C();
        c.Connect(senders);
        senders.OnPageSwap(new StartEventArgs());
    }
}
public delegate void StartEventHandler(object sender, StartEventArgs e);
public class B
{
    public event StartEventHandler PageSwap;
    public virtual void OnPageSwap(StartEventArgs e)
    {
        Console.WriteLine("Entered PageSwapSender");
        if (PageSwap != null) PageSwap(this, e);
    }
}
class C
{
    public void Connect(B sender)
    {
        sender.PageSwap += new StartEventHandler(this.sender_PageSwap);
        Console.WriteLine("Entered Connect");
    }
    private void sender_PageSwap(object sender, StartEventArgs e)
    {
        Console.WriteLine("Entered Handler");
    }
}

C.Connect()没有被调用,它需要被调用,因为它是你注册调用this.sender_PageSwap的事件处理程序的地方。没有这一点,什么都不会发生。

相关内容

  • 没有找到相关文章

最新更新