当前位置: 首页 > 知识库问答 >
问题:

C#EventHandler在调用时返回null

文寒
2023-03-14

我有两门课。在一节课上,我创建并发起了一个活动,如下所示:

客户添加类

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

MyWindow类

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为空。如有任何指导/帮助,将不胜感激。

共有2个答案

何和惬
2023-03-14

试试这个:

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;
        }
    }
}

你需要好好阅读代表和事件,因为当有更多的听众时,这是不起作用的

西门淮晨
2023-03-14

它的工作原理:

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();
        }
    }
}
 类似资料:
  • 说明: callback BusinessWorker::$eventHandler (注意:此特性需要GatewayWorker版本>=2.0.2,如何查看版本号参考《常见问题》一章) (此属性一般不用设置) 设置使用哪个类来处理业务,默认值是Events,即默认使用Events.php中的Events类来处理业务。业务类至少要实现onMessage静态方法,onConnect和onClose静

  • 我公开了一个。NET API,运行在IIS服务器上。有一个每晚执行的Windows计划任务。它运行一个cURL请求。当我复制该命令并在cmd窗口中执行它时,它返回401。 我在Postman中尝试了相同的api调用,得到了200。 IIS日志显示: cUrl命令和Postman实例都在服务器上运行。运行API的同一台。我是不是错过了邮递员做的事情,我需要让卷毛做的事情?

  • 我不确定我是否滥用了基于交互的测试,或者我是否做了一些概念上的错误。我正在开发一个Spring Boot应用程序(Kotlin),我的测试使用的是Spock/Groovy。 我有一个正在测试的类,它调用另一个服务来查询信息。被测试的类应该缓存结果。但是,我不能用返回值模拟一个方法并检查调用的次数,因为当我添加调用检查时,被模拟的方法总是返回null。 我创建了一个独立的示例,演示了这个问题。 前两

  • 问题内容: 例如我有一个功能: 我怎样才能返回AJAX后得到的? 问题答案: 因为请求是异步的,所以您无法返回ajax请求的结果(而同步ajax请求是一个 糟糕的 主意)。 最好的选择是将自己的回调传递给f1 然后,您将像这样致电:

  • 当我实例化实体并在DTO to entity方法上使用mapstruct mapper时,我有一个返回空指针的简单映射器。我的实体要长得多,并且使用另一种语言,所以我将编写一个类似的实体作为示例。 我使用的是java 8和Spring boot 2.5.2 这是我的实体: 这是我的数据传输对象,又名DTO: 这是我的映射器,两个类(实体和dto)具有相同的属性名称。事实上,我也尝试过@Map注释,