这些日子使用委托的时候很不顺,于是认真的看了几篇文章,然后写了个小demo,于是效果就出来了。
delegate可以多播,有两种方法实现
1、使用同一对象,接收消息
代码:
TestA 类中的委托
public class TestA
{
//定义委托 计算点到直线的距离
public delegate void SendMessageAEventHandler(object sender, object obj);
//定义事件
public event SendMessageAEventHandler SendMessageEventA;
public TestA() {
this.SendMessageEventA +=new SendMessageAEventHandler(TestA_SendMessageEventA);
}
void TestA_SendMessageEventA(object sender, object obj) {
MessageBox.Show("A TestA " + obj.ToString());
}
public void SendMessageATest(string msg) {
SendMessageAEventHandler handle = SendMessageEventA;
if (handle != null) {
handle(this, msg);
}
}
}
在MainPage中使用
void MainPage_Loaded(Object sender, RoutedEventArgs e) {
ta = new TestA();
ta.SendMessageEventA +=new TestA.SendMessageAEventHandler(ta_SendMessageEventA);
}
//接收
void ta_SendMessageEventA(object sender, object obj) {
MessageBox.Show("A MainPageTestA "+obj.ToString());
}
//发送
private void button2_Click(object sender, RoutedEventArgs e)
{
ta.SendMessageATest(this.textBox2.Text);
}
在Test中接收
public Test(MainPage mainPage,TestA t) {
mainPage.SendMessageEvent +=new MainPage.SendMessageEventHandler(mainPage_SendMessageEvent);
t.SendMessageEventA +=new TestA.SendMessageAEventHandler(ta_SendMessageEventA);
TestB.SendMessageEventB+=new TestB.SendMessageBEventHandler(TestB_SendMessageEventB);
}
void ta_SendMessageEventA(object sender, object obj) {
MessageBox.Show("A TestA " + obj.ToString());
}
结论表示,通过按钮事件发送一个消息,MainPage 和Test 中都可以接收
2、使用静态的事件定义接收
TestB中定义静态的委托事件
public class TestB
{
//定义委托 计算点到直线的距离
public delegate void SendMessageBEventHandler(object sender, object obj);
//定义事件
public static event SendMessageBEventHandler SendMessageEventB;
public static void SendMessageBTest(string msg) {
SendMessageBEventHandler handle = SendMessageEventB;
if (handle != null) {
handle("Obj", msg);
}
}
}
MainPage中使用
void MainPage_Loaded(Object sender, RoutedEventArgs e) {
TestB.SendMessageEventB+=new TestB.SendMessageBEventHandler(TestB_SendMessageEventB);
}
//MainPage中接收
void TestB_SendMessageEventB(object sender, object obj) {
MessageBox.Show("B MainPageTestB " + obj.ToString());
}
//发送
private void button3_Click(object sender, RoutedEventArgs e)
{
TestB.SendMessageBTest(this.textBox3.Text);
}
Test中接收
public Test(MainPage mainPage,TestA t) {
TestB.SendMessageEventB+=new TestB.SendMessageBEventHandler(TestB_SendMessageEventB);
}
void TestB_SendMessageEventB(object sender, object obj) {
MessageBox.Show("B TestB " + obj.ToString());
}
实验表示,使用静态的委托也能接收到多播消息
额,不懂如何上传源码Demo~~知道的告知下,嘿嘿 谢谢~