【问题标题】:C# Event handlers are not available to another referenceC# 事件处理程序不可用于其他参考
【发布时间】:2021-04-04 13:13:22
【问题描述】:

我有一个示例类。它有一个带有事件处理程序的 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 访问集合,为什么不执行事件处理程序?

【问题讨论】:

    标签: c# events observablecollection


    【解决方案1】:

    我无法重现该问题。此代码按预期工作。

    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.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 2017-10-21
      • 1970-01-01
      相关资源
      最近更新 更多