备忘,Sl中委托使用两种方法
这些日子使用委托的时候很不顺,于是认真的看了几篇文章,然后写了个小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~~知道的告知下,嘿嘿 谢谢~
推荐.NET配套的通用数据层ORM框架:CYQ.Data 通用数据层框架