1

私が達成しようとしていることの説明は次のとおりです。

フォームの「デバッグ」または「情報」ウィンドウとして使用しているテキスト ボックスがあります。私がやりたいことは、デバッグ ウィンドウに投稿する情報があるときに、作成したクラスにイベントをスローさせ、テキスト ウィンドウにそのイベントをサブスクライブさせ、何か新しいものが入るたびに投稿させることです。私のクラスがテキストボックスの知識を必要としないようにしようとしていますが、それでもすべての情報をテキストボックスに渡す機能があります。

クラス間で「共有」イベントを (おそらくインターフェイスを使用して) 持つことは可能ですか? その 1 つのイベントをサブスクライブするだけで、イベントをスローするすべてのクラスからプルすることができますか?

ビジュアルの場合、基本的には次のようになります。

Public delegate void DebugInfo(string content)

Class foo1
{
   event DebugInfo DebugContentPending

   public void bar()
   {
      DebugContentPending("send this info to the debug window")
   }
}

Class foo2
{
   event DebugInfo DebugContentPending

   public void bar()
   {
      DebugContentPending("send this info to the debug window")
   }
}


Class SomeClass
{
    public void SomeMethod()
    {
       DebugContentPending += new DebugInfo(HandleContent);  //gets events from foo1 and foo2
    }

    public void HandleContent(string content)
    {
       //handle messages
    }
}

これは可能ですか、それともロッカーから外れていますか?

4

1 に答える 1

4

ほとんどの場合、イベントは必要ありません。

class DebugLogger
{
    public DebugLogger(TextBox textBox)
    {
        this.TextBox = textBox;
    }

    public TextBox TextBox { get; private set; }

    public static DebugLogger Instance { get; set; }

    public void Write(string text)
    {
        this.TextBox.Text += text;
    }
}

初期化:

DebugLogger.Instance = new DebugLogger(textBox1);

使用法:

DebugLogger.Instance.Write("foo");

コードはスレッドセーフではないことに注意してください。詳細については、InvokeRequired コード パターンの自動化と関連を参照してください。

于 2013-02-10T05:10:40.263 に答える