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

C#事件处理程序对其他引用不可用

尉迟华翰
2023-03-14

我有一节范例课。它有一个附加了事件处理程序的ObservableCollection。

class SomeItem
{
    public ObservableCollection<Thing> Things = new ObservableCollection<Thing>();
    
    private SomeEventHandler(object Sender, NotifyCollectionChangedEventArgs E)
    {
        //do something
    }
    
    public SomeItem()
    {
        this.Things.CollectionChanged += SomeEventHandler;
    }
}

我正在执行以下代码:

SomeItem Instance = new SomeItem();

Instance.Things.Add(new Thing()); // SomeEventHandler executed;

SomeItem AnotherReference = Instance;

AnotherReference.Things.Add(new Thing()); // SomeEventHandler NOT executed

如果从AnotherReference访问集合,为什么不执行事件处理程序?

共有1个答案

谢麒
2023-03-14

我无法再现问题。这段代码按预期工作。

using System;
using System.Collections.ObjectModel;
using System.Collections.Specialized;

namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args) {

            SomeItem Instance = new SomeItem();
          
            Instance.Things.Add(new Thing()); // SomeEventHandler executed;
            
            SomeItem AnotherReference = Instance;
            
            AnotherReference.Things.Add(new Thing()); // SomeEventHandler ALSO executed
        }
    }

    class Thing { 
    }

    class SomeItem
    {
        public ObservableCollection<Thing> Things = new ObservableCollection<Thing>();

        private void SomeEventHandler(object sender, NotifyCollectionChangedEventArgs e) {
            Console.WriteLine("Hello from SomeEventHandler");
        }

        public SomeItem() {
            this.Things.CollectionChanged += SomeEventHandler;
        }
    }
}

结果:

Hello from SomeEventHandler
Hello from SomeEventHandler
Press any key to continue.
 类似资料:
  • 我正在使用javafx创建一个扫雷克隆,如果有人玩过原始游戏,他们可能会记得当你按下一个磁贴并四处移动时,其他磁贴的行为就好像它们也在被按下一样...如果你放手-即使你最初按下的是一个完全不同的节点,你鼠标当前所在的节点也会被点击。我很难重新创建这个,我需要一些帮助。 我正在使用全局事件处理程序类,我不太确定这是好是坏......但是,让我的克隆的事件单独处理感觉很好。我尝试过在事件发生的节点上使

  • 我在页面上有输入字段和提交按钮。 这里是jQuery代码: 我想防止模糊,如果从输入字段点击提交div,但想允许它,如果从输入字段点击页面的其他部分。我无法使用“提交”按钮。 我已竖起了小提琴。净/405kzboh/1 但是现在我甚至不明白为什么点击事件没有在模糊事件之前触发,如果有人从输入点击提交!

  • 问题内容: 我试图在Go中启动一个HTTP服务器,该服务器将使用自己的处理程序来提供自己的数据,但与此同时,我想使用默认的http FileServer来提供文件。 我在使FileServer的处理程序在URL子目录中工作时遇到问题。 该代码不起作用: 我期望在localhost:1234 / files /中找到本地目录,但是它返回一个。 但是,如果我将文件服务器的处理程序地址更改为/,它将起作

  • 我是Java编程的新手,所以这个问题对这里的许多人来说可能听起来很愚蠢。我试图让自己熟悉JavaFX事件处理机制。 我正在开发一个GUI,我希望按钮在单击它时以及按下Enter键时执行相同的功能。 我能做以下事情吗? 然后将它用于两个按键事件

  • 问题内容: 在React教程中,它说 这样做会立即发出警报,而不是在单击按钮时发出警报。 但是,我不明白为什么会这样…任何人都可以为我澄清一下吗?为什么不能将函数调用作为处理程序传递? 问题答案: 当您执行此操作时,将调用该函数并将返回的值()分配给该属性。所以,React看到的是这样说的: 嗯,那不是一个函数,为什么我要添加这样的处理程序? 您要传递的是一个函数,而不是。 因此,您必须做:可以像

  • 我正在编写一个Java7Swing应用程序,它调用一个非GUI类来在循环中执行某些操作。不幸的是,当循环运行时,我无法与GUI交互。在该循环中是否可以强制处理GUI事件? 我正在搜索一些内容,告诉JVM在继续循环之前处理其他GUI事件(如按钮单击)。