起步软件技术论坛-X3

 找回密码
 立即注册
搜索
12
返回列表 发新帖
楼主: alang

[分享]环境中发消息的原理说明

[复制链接]
 楼主| 发表于 2008-6-25 14:12:24 | 显示全部楼层

场景2:人员环境BroadcastToParent

在全局环境AddHandler
在功能环境AddHandler
在人员环境BroadcastToParent

运行结果:
  全局环境的消息处理对象执行了

说明:
  BroadcastToParent是把消息发给父环境来处理

1.png

13.88 KB, 下载次数: 424

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-25 14:18:48 | 显示全部楼层

场景3:功能环境BroadcastToParent

在全局环境AddHandler,Handled=False
在人员环境AddHandler,Handled=False
在功能环境AddHandler,Handled=False
在功能环境BroadcastToParent

运行结果:
  人员环境的消息处理对象执行了,全局环境的消息处理对象也执行了

说明:
  BroadcastToParent是把消息发给父环境来处理,并且两级父环境(人员环境、全局环境)都执行了,因为功能环境的父环境(人员环境)的Handled=False,认为人员环境的消息处理对象没有完全处理这个消息,因此继续把这个消息发给全局环境的父环境(全局环境)来处理

下图是人员环境的消息处理对象在执行

1.png

11.92 KB, 下载次数: 416

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-25 14:22:00 | 显示全部楼层
人员环境处理以后,全局环境继续处理

1.png

12.31 KB, 下载次数: 417

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-25 14:23:13 | 显示全部楼层
因为所有的消息处理对象的Handled都是False,所以,当所有的消息处理对象都执行以后,还是任务消息没有得到处理

1.png

10.98 KB, 下载次数: 417

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-25 16:17:47 | 显示全部楼层
平台中很多是通过消息实现的
比如:功能关闭时候,调用功能的UpdatePending方法 判断是否有UpdatePending的数据集,就是在功能环境BroadcastToChildren一个 Name为UpdatesPendingQuery 的消息,然后每一个有数据集的环境中都会处理这个消息,来判断是否有数据集是 UpdatePending 的
功能的ApplyUpdate方法来提交每一个数据集,也是同样的做法。

数据集打开之前,会查找所有跟自己相关的策略,也是通过在环境中BroadcastToParent 一个name为System.GetObjectPolicies 的消息,每一级环境都定义了消息处理对象,把自己环境下的策略返回给消息,数据集根据消息的内容可以找到每一级父环境中对自己有影响的策略。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-6-25 16:18:32 | 显示全部楼层
主界面上的业务关联也是通过消息来实现的,详细的分析请参考 http://bbs.justep.com/forum.php?mod=viewthread&tid=24111
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-18 09:01 , Processed in 0.042635 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表