调用C#EventHandler时返回null
我有两个班。在一个班里,我创建并发起一个活动,如下所示: 客户添加类调用C#EventHandler时返回null,c#,events,delegates,eventhandler,C#,Events,Delegates,Eventhandler,我有两个班。在一个班里,我创建并发起一个活动,如下所示: 客户添加类 public class CustomerAdd { public delegate void Done(object Sender, EventArgs e); public event Done ListUpdated; public void UpdateNewList() { //adding items to a generic List<T>,code removed as not relevant
public class CustomerAdd
{
public delegate void Done(object Sender, EventArgs e);
public event Done ListUpdated;
public void UpdateNewList()
{
//adding items to a generic List<T>,code removed as not relevant to post
//and raising the event afterwards
if (ListUpdated != null)
{
ListUpdated(this, EventArgs.Empty);
}
}
}
public class MyWindow
{
private void SaveToDisk()
{
CustomerAdd cuss = new CustomerAdd();
cuss.ListUpdated += new CustomerAdd.Done(DisplayDetails);
cuss.UpdateNewList();
}
private void DisplayDetails()
{
//other codes here
}
}
现在,当我从MyWIndow
类调用SaveToDisk
方法时,(当我订阅DisplayDetails
方法到listdated
事件时),DisplayDetails
不会被调用。调试器显示ListUpdated
为空。我搜索了几个小时,没有找到解决方案。我遵循了,但仍然ListUpdated
为空。任何指导/帮助都将不胜感激。试试以下方法:
using System;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
CustomerReceive cr = new CustomerReceive();
cr.SaveToDisk();
}
}
public class CustomerAdd
{
public delegate void Done(object Sender, EventArgs e);
public event Done ListUpdated;
public void UpdateNewList()
{
//adding items to a generic List<T>,code removed as not relevant to post
//and raising the event afterwards
if (ListUpdated != null)
{
ListUpdated.Invoke(this, EventArgs.Empty);
}
}
}
public class CustomerReceive
{
public void SaveToDisk()
{
CustomerAdd cuss = new CustomerAdd();
cuss.ListUpdated += new CustomerAdd.Done(DisplayDetails);
cuss.UpdateNewList();
}
private void DisplayDetails(object Sender, EventArgs e)
{
int k = 0;
}
}
}
使用系统;
名称空间控制台EAPP1
{
班级计划
{
静态void Main(字符串[]参数)
{
CustomerReceive cr=新CustomerReceive();
cr.SaveToDisk();
}
}
公共类客户添加
{
公共委托无效完成(对象发送方,事件参数e);
已完成的公共活动列表更新;
public void UpdateNewList()
{
//将项目添加到常规列表中,代码被删除为与post无关
//并在事后提出该事件
如果(ListUpdated!=null)
{
调用(这个,EventArgs.Empty);
}
}
}
公共类CustomerReceive
{
public void SaveToDisk()
{
CustomerAdd curs=新CustomerAdd();
cuss.ListUpdated+=新客户添加完成(显示详细信息);
cuss.UpdateNewList();
}
私有void显示详细信息(对象发送方、事件参数)
{
int k=0;
}
}
}
您需要仔细阅读代理和事件,因为当有更多侦听器时,这不起作用它起作用:
using System;
namespace ConsoleApp2
{
class Program
{
public class CustomerAdd1
{
public delegate void Done(object Sender, EventArgs e);
public event Done ListUpdated;
public void UpdateNewList()
{
//adding items to a generic List<T>,code removed as not relevant to post
//and raising the event afterwards
if (ListUpdated != null)
{
ListUpdated(this, EventArgs.Empty);
}
}
}
public class CustomerAdd
{
public void SaveToDisk()
{
CustomerAdd1 cuss = new CustomerAdd1();
cuss.ListUpdated += new CustomerAdd1.Done(DisplayDetails);
cuss.UpdateNewList();
}
private void DisplayDetails(object Sender, EventArgs e)
{
Console.WriteLine("Test");
}
}
static void Main(string[] args)
{
var c = new CustomerAdd();
c.SaveToDisk();
Console.ReadLine();
}
}
}
使用系统;
名称空间控制台EApp2
{
班级计划
{
公共类CustomerAdd1
{
公共委托无效完成(对象发送方,事件参数e);
已完成的公共活动列表更新;
public void UpdateNewList()
{
//将项目添加到常规列表中,代码被删除为与post无关
//并在事后提出该事件
如果(ListUpdated!=null)
{
ListUpdated(此为EventArgs.Empty);
}
}
}
公共类客户添加
{
public void SaveToDisk()
{
CustomerAdd1 cuss=新CustomerAdd1();
cuss.ListUpdated+=新CustomerAdd1.Done(显示详细信息);
cuss.UpdateNewList();
}
私有void显示详细信息(对象发送方、事件参数)
{
控制台写入线(“测试”);
}
}
静态void Main(字符串[]参数)
{
var c=新客户添加();
c、 SaveToDisk();
Console.ReadLine();
}
}
}
DisplayDetails
必须有CustomerAdd.Done
签名:private void DisplayDetails(object Sender,EventArgs e)
/code>私有void DisplayDetails(object Sender,eventarges e)/code>CustomerAdd.don为什么两个类都命名为CustomerAdd
,当已经有一个框架为该签名(EventHandler)提供了一个委托时,为什么要创建一个新委托?我不是在做同样的事情吗?我已经够傻了。。。。问题是,我在调用该方法后订阅了该事件(我代码中的帖子确实有效,但它不是原始代码…),因此,无论如何,谢谢