我有一个代码,它应该在接收事件时通知一个服务类中的代理:
public class TestClass : ParentClass
{
public event EventHandler<string> MyDelegate;
public override void OnAction(Context context, Intent intent)
{
var handler = MyDelegate;
if (handler != null)
{
handler(this, "test");
}
}
}
我通过以下方式实例化:
private TestClass mytest= new TestClass ();
然后在其中一个函数中分配它:
mytest.MyDelegate+= (sender, info) => {
};
委托人永远不会被召唤。我已经使用调试器,我看到该委托正在被分配,但是一个类中的检查总是为空的......不知道问题是什么......
答案 0 :(得分:1)
听起来像执行订单问题。可能发生的事情是OnAction
中的TestClass
在委托连接之前被调用。请尝试以下方法:
public class TestClass : ParentClass
{
public event EventHandler<string> MyDelegate;
public class TestClass(Action<string> myAction)
{
MyDelegate += myAction;
}
public override void OnAction(Context context, Intent intent)
{
var handler = MyDelegate;
if (handler != null)
{
handler(this, "test");
}
}
}
只需通过构造函数传递委托,这应该确保在调用OnAction()
您可以通过几种方式传递处理程序:
1。)作为匿名方法:
private TestClass mytest= new TestClass ((sender, info) => { Console.WriteLine("Event Attached!") });
2。)传入方法组:
public class MyEventHandler(object sender, string e)
{
Console.WriteLine("Event Attached!");
}
private TestClass mytest= new TestClass(MyEventHandler);
我通常建议采用第二种方式,因为它允许你取消处理程序并在完成后清理它:
myTest.MyDelegate -= MyEventHandler;