频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

使用Publish/Subscribe 设计模式达到对象间数据同步(二)

来源: 作者: 出处:巧巧读书 2006-09-12 进入讨论组
引用:http://www.qqread.com/dotnet/u237104.html
  在注册处理期间,subscriber被分配一个独特的标记,用来在event channel中标识subscriber。event channel也使用这个标记索引那些subscriber。
虽然样品应用作为标记目标的杂乱脉冲干扰电码使用,我推荐在你的自己的程序里使用另一个方法产生一个独特的标识符 ( 例如产生一GUID)。

使用目录菜单建立3到4个frmList窗口实例。使用新的目录菜单选项创作frmList 的3 或者4 个实例,然后在其中一个窗口中选择一个条目,双击这个条目进入可编辑模式,键入一个新的名字。窗体建立一个描述数据更新的事件并通过event channel发送。

Private Sub lvwList_AfterLabelEdit(ByVal sender As _ Object,
ByVal e As _ System.Windows.Forms.LabelEditEventArgs) _
Handles lvwList.AfterLabelEdit
Dim objEvent As clsDataEvent
If e.Label <> "" Then
objEvent = New clsDataEvent()
With objEvent
.Name = "NameChanged"
.Value = e.Label
.ExtraData = lvwList.Items(e.Item).Tag
.Origin = Me
End With
MyBase.EventChannel.PublishEvent(objEvent)
End If
End Sub
发送事件的窗体证实它是事件的创始人;并将clsDataEvent类的Origin属性设置为它自己。这样可以阻挡其他多余的事件,以确保发送者接收到的事件都是已经发布过的。最后,事件的发布者注意到了数据的改变。

所有的subscribers将收到事件。在EventApp 中,每个frmList 的实例将收到事件并且改变每个ListView中的发生变化的项目:

Public Overrides Sub EventRaise( _ ByVal NewEvent As _
EventApp.clsEvent)
Dim objListItem As ListViewItem

Select Case NewEvent.Name
Case "NameChanged"
For Each objListItem In lvwList.Items
If objListItem.Tag = NewEvent.ExtraData Then
objListItem.Text = NewEvent.Value
End If
Next
Case Else
'Handle other events
End Select
End Sub

这种事件系统类型将给你带来很大的灵活性。你可以使在应用程序中的任何一个
对象发布事件,只有那些对此感兴趣的对象的到更新的信息。也可以改变Event
Channel类的实现方式, 如可以通过使用Web service或者消息系统(如MS
Message Queue 或者 IBM MQ 系列),通过 HTTP协发送事件。进入讨论组讨论。
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
最新论坛文章
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章