2009-06-19 15 views
2

私が作成したイベントに登録するのに少し問題があります。イベント自体は独自のクラスに属しており、別のプロジェクトの別のクラスからそのイベントにサブスクライブできるようにしたいと考えています。私はそれが作成されたクラスからそれを購読することができます - しかし、私は別のプロジェクトの別のクラスから購読しようとすると何も起こりません。別のクラスのイベントを購読する

誰かに私がこれをどのようにしてどうやって作業できるかについてのいくつかの指針を与えることができますか?私は解決策を見つけようとしてすべてのGoogleの上にあったが、無駄にしている:(ここで

+0

コードを投稿してください。 –

+1

最初に明らかな質問:イベントは公開されていますか? –

答えて

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

これを試しましたか?

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

私は単に「以下のコードは、ちょうどあなたのように動作します(私はSystem名前空間に非ジェネリックアクションデリゲートを見つけることができなかったので)の代わりにアクションのイベントハンドラデリゲートを

をあなたのサンプルコードを試してみましたd expect: "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(); 
    } 
} 
+1

サンプルコードは、OPではなく、Andrewによって投稿されました。アンドリュースのコードはそのまま動作するはずです。 – Brandon

+0

ああ、私はひどく残念です - 答えを盗むつもりはありませんでした:-( – Steffen

0

あなたのクラスは異なるプロジェクトに属していますが、イベントクラス(またはそのプロジェクトの他のクラス)が見えますか?おそらくあなたは他のプロジェクトを適切に参照していないでしょう。

関連する問題