xamarin EventHandler始终为null

时间:2015-11-16 19:00:37

标签: c# xamarin

我有一个代码,它应该在接收事件时通知一个服务类中的代理:

    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) => {
    };

委托人永远不会被召唤。我已经使用调试器,我看到该委托正在被分配,但是一个类中的检查总是为空的......不知道问题是什么......

1 个答案:

答案 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;