我有一個3窗口的示例窗體。每個窗口都有一個標籤,主窗體有一個按鈕。Windows窗體事件訂閱c#
我有下面的代碼類:
public class CustomEventArgs : EventArgs
{
public string Message { get; set; }
public CustomEventArgs(string message)
{
Message = message;
}
}
public delegate void CustomEventHandler(object sender, CustomEventArgs args);
public class EventCode
{
public void Process()
{
var cea = new CustomEventArgs("I was processed");
if (MyEvent != null)
{
MyEvent.Invoke(this, cea);
}
}
public event CustomEventHandler MyEvent;
}
在我的主要形式,我要按下按鈕,有它在我的EVENTCODE類過程代碼,然後調用事件。我希望事件向兩個已打開的表單發送一條消息,然後在屏幕上顯示一條消息。
這裏是在Form1中我按一下按鈕代碼:
private void Form1_Load(object sender, EventArgs e)
{
Window1 w1 = new Window1();
w1.Show();
Window2 w2 = new Window2();
w2.Show();
}
private void button1_Click(object sender, EventArgs e)
{
EventCode ec = new EventCode();
ec.Process();
}
在窗口1:
EventCode ec = new EventCode();
public Window1()
{
InitializeComponent();
ec.MyEvent += new CustomEventHandler(ec_MyEvent);
}
void ec_MyEvent(object sender, CustomEventArgs args)
{
label1.Text = args.Message;
}
重複窗口2
當我點擊該按鈕,事件訂閱呢不要在每個表單上顯示文字。如果我在主窗體上創建事件訂閱,它將顯示。
我不確定採取哪條路線才能使此功能正常工作。
想法?
@SLaks,這不是真的......'.Invoke'是隱含的,省略它會導致完全相同的IL。也許你對「DynamicInvoke」感到困惑,它確實慢得多。 – 2010-09-28 22:18:55