Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用C#EventHandler时返回null_C#_Events_Delegates_Eventhandler - Fatal编程技术网

调用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)提供了一个委托时,为什么要创建一个新委托?我不是在做同样的事情吗?我已经够傻了。。。。问题是,我在调用该方法后订阅了该事件(我代码中的帖子确实有效,但它不是原始代码…),因此,无论如何,谢谢