我有一个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