【问题标题】:Subscribing to events in a separate class在单独的类中订阅事件
【发布时间】:2010-11-04 09:10:43
【问题描述】:

我在订阅我创建的活动时遇到了一些问题。事件本身在它自己的类中,我希望能够从单独项目中的单独类订阅它。我可以从创建它的类订阅它 - 但是当我尝试从不同项目中的不同类订阅时,没有任何反应。

有人能给我一些关于如何解决这个问题的建议吗?我一直在谷歌试图找到一个解决方案,但无济于事:(。

【问题讨论】:

  • 您能发布一些您的代码吗?
  • 首先明确的问题:活动是否公开?

标签: c# events subscription


【解决方案1】:

以下是我创建并订阅的事件的一个简单示例:

using System;

class Program
{
    static void Main()
    {
        Foo foo = new Foo();
        foo.Fooing += () => Console.WriteLine("Foo foo'd");

        foo.PleaseRaiseFoo();
    }
}

class Foo
{
    public event Action Fooing;

    protected void OnFooing()
    {
        if (this.Fooing != null)
            this.Fooing();
    }

    public void PleaseRaiseFoo()
    {
        this.OnFooing();
    }
}

希望这应该能够为您指明正确的方向。检查代码的主要内容:

  • 您的活动是否标记为公开?
  • 您是否提出过事件? (例如this.Fooing()

【讨论】:

    【解决方案2】:

    我刚刚使用 EventHandler 委托而不是 Action 尝试了您的示例代码(因为我在 System 命名空间中找不到非泛型 Action 委托)

    下面的代码和你期望的一样工作:它输出“Foo foo'd”。

    也许是 Action 委托,虽然我觉得这有点奇怪。

    class Program
    {
        static void Main()
        {
            Foo foo = new Foo();
            foo.Fooing += (object o, EventArgs e) => Console.WriteLine("Foo foo'd");
    
            foo.PleaseRaiseFoo();
        }
    }
    
    class Foo
    {
        public event EventHandler Fooing;
    
        protected void OnFooing()
        {
            if (this.Fooing != null)
                this.Fooing(null, null);
        }
    
        public void PleaseRaiseFoo()
        {
            this.OnFooing();
        }
    }
    

    【讨论】:

    • 示例代码由 Andrew 发布,而不是 OP。安德鲁斯代码应该按原样工作。
    • 哦,天哪,我非常抱歉 - 并不是要窃取答案:-(
    【解决方案3】:

    你试过了吗?

    MyInstanceOfMyClass.MyEvent += new EventHandler(MyDelegate);
    protected void MyDelegate(object sender, EventArgs e) { ... }
    

    【讨论】:

      【解决方案4】:

      您注意到您的班级在不同的项目中,您能看到事件班级(或该项目中的任何其他班级)吗?也许您没有正确引用您的其他项目。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-16
        • 1970-01-01
        • 1970-01-01
        • 2021-09-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多