委托,多播 实现问题。

dui_cky 2010-12-28 09:49:05
目标,一个地方发信息,许多地方可以接收到。
使用方法: 使用委托处理 代码如下: (谁有好的方法吗?)

服务器:

public class PropertyManager
{

#region 属性委托


//声明一个委托
public delegate void changeControlsHandler(string sender ,Object reAct);
//委托对应的事件
public event changeControlsHandler changeControlsEvent;

/// <summary>
/// 处理改变事件
/// </summary>
/// <param name="sender"></param>
/// <param name="reAct"></param>
void PropertyManager_changeControlsEvent(string sender, Object reAct)
{
Console.WriteLine("My event is ok!");
}

/// <summary>
/// 对外提供处理发送对象
/// </summary>
/// <param name="sender">控件名 如:Label</param>
/// <param name="reAct"></param>
public void changeControlsEventSend(string sender, Object reAct)
{
this.changeControlsEvent(sender, reAct);
}

#endregion

public PropertyManager() {
changeControlsEvent +=new changeControlsHandler(PropertyManager_changeControlsEvent);

}
}


发送端:

我是通过外部实例化一个PropertyManager,然后调用changeControlsEventSend方法发送
PropertyManager propertyManager = new PropertyManager();
propertyManager .changeControlsEventSend("SendTest","Test");

接收端:

PropertyManager propertyManager = new PropertyManager();
propertyManager.changeControlsEvent +=new PropertyManager.changeControlsHandler(propertyManager_changeControlsEvent);
void propertyManager_changeControlsEvent(string sender, Object reAct) {
MessageBox.Show("Receive"):
}


通过调试,发现已经调用了PropertyManager中的发送方法,可是客户端就是无法接收到发送的信息? 大家帮忙看看 谢谢。
...全文
30 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
dui_cky 2010-12-28
感谢jimmy_xiao0010,和sunpire大哥的回答,
问题应该是出在sunpire大哥指出的二三点,的到想要的答案了,结贴了,测试去
回复
Sunpire 2010-12-28
不明白。
一、 .NET 的 delegate 本来就是一条链,本来就是可以 Multicast 的,为什么要搞得这么复杂?
.NET 的 event 本来就是“观察者模式”的一种实现,也就是具有楼主所要的“一个地方发信息,许多地方可以接收到”的目标的。

二、 从楼主的代码来看,发送者和接收者 都实例化了 PropertyManager() ,这样怎么可能实现要求呢?
必须要是同一个实例或是static 的才可以啊。

三、 楼主可以简单的试一下,把一个实体的实例的同一个属性,以非OneTime的方式 Binding 到多个不同的控件上(可以在不同的 UserControl 或 Page )中,然后更改这个实例的属性的值,看看是不是那些被绑定的控件都有变化了
回复
jimmy_xiao0010 2010-12-28
就按你的代码来说,
propertyManager.changeControlsEvent +=new PropertyManager.changeControlsHandler(propertyManager_changeControlsEvent);

这行又注册个事件函数,所以在发送完事件后,即:
propertyManager.changeControlsEventSend("SendTest","Test");propertyManager_changeControlsEvent方法可以接受到的。
前提是先注册 后发送。

参考多播委托:
http://www.cnblogs.com/pursue/archive/2009/08/05/1539361.html
回复
发动态
发帖子
WPF/Silverlight
创建于2007-09-28

8566

社区成员

WPF/Silverlight相关讨论
申请成为版主
社区公告
暂无公告