订阅单独课程中的事件

时间:2009-06-19 17:26:48

标签: c# events subscription

订阅我创建的活动时遇到了一些麻烦。事件本身在它自己的类中,我希望能够从单独项目中的单独类订阅它。我能够从创建它的类订阅它 - 但是当我尝试从不同项目中的另一个类订阅时,没有任何事情发生。

有人可以给我一些关于如何完成这项工作的指示吗?我一直在谷歌试图找到一个解决方案但无济于事(。

4 个答案:

答案 0 :(得分:6)

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

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()

答案 1 :(得分:1)

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

下面的代码就像你期望的那样工作:输出“Foo foo'd”。

也许这是行动代表,虽然我觉得有些奇怪。

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

答案 2 :(得分:0)

你试过这个吗?

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

答案 3 :(得分:0)

您注意到您的课程处于不同的项目中,您是否可以看到事件类(或该项目中的任何其他类)?也许您没有正确引用其他项目。