2

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

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

4

4 回答 4

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()
于 2009-06-19T17:31:20.873 回答
1

我刚刚使用 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();
    }
}
于 2009-06-19T17:43:10.737 回答
0

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

于 2009-06-19T18:03:20.270 回答
0

你试过这个吗?

MyInstanceOfMyClass.MyEvent += new EventHandler(MyDelegate);
protected void MyDelegate(object sender, EventArgs e) { ... }
于 2009-06-19T17:32:07.177 回答