我有 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# - 事件始终为 Null,因此无法处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54229275/