在注册处理期间,subscriber被分配一个独特的标记,用来在event channel中标识subscriber。event channel也使用这个标记索引那些subscriber。 虽然样品应用作为标记目标的杂乱脉冲干扰电码使用,我推荐在你的自己的程序里使用另一个方法产生一个独特的标识符 ( 例如产生一GUID)。
使用目录菜单建立3到4个frmList窗口实例。使用新的目录菜单选项创作frmList 的3 或者4 个实例,然后在其中一个窗口中选择一个条目,双击这个条目进入可编辑模式,键入一个新的名字。窗体建立一个描述数据更新的事件并通过event channel发送。
Private SublvwList_AfterLabelEdit(ByValsenderAs_ Object,
ByVale As _System.Windows.Forms.LabelEditEventArgs) _
HandleslvwList.AfterLabelEdit
Dim objEventAsclsDataEvent
Ife.Label <> ""Then
objEvent =NewclsDataEvent()
WithobjEvent
.Name = "NameChanged" .Value = e.Label .ExtraData = lvwList.Items(e.Item).Tag.Origin =Me
End WithMyBase.EventChannel.PublishEvent(objEvent)
End IfEnd Sub
发送事件的窗体证实它是事件的创始人;并将clsDataEvent类的Origin属性设置为它自己。这样可以阻挡其他多余的事件,以确保发送者接收到的事件都是已经发布过的。最后,事件的发布者注意到了数据的改变。
所有的subscribers将收到事件。在EventApp 中,每个frmList 的实例将收到事件并且改变每个ListView中的发生变化的项目:
Public Overrides SubEventRaise( _ByValNewEventAs_
EventApp.clsEvent)DimobjListItemAsListViewItem
Select CaseNewEvent.Name
Case"NameChanged"
For EachobjListItemInlvwList.Items
IfobjListItem.Tag = NewEvent.ExtraDataThen
objListItem.Text = NewEvent.ValueEnd If
Next
Case Else
'Handle other events
End Select
End Sub 这种事件系统类型将给你带来很大的灵活性。你可以使在应用程序中的任何一个对象发布事件,只有那些对此感兴趣的对象的到更新的信息。也可以改变Event
Channel类的实现方式, 如可以通过使用Web service或者消息系统(如MS
Message Queue 或者 IBM MQ 系列),通过 HTTP协发送事件。
博客介绍了注册处理时为subscriber分配独特标记用于event channel标识和索引,推荐用GUID产生标识符。还讲述使用目录菜单创建frmList窗口实例,窗体产生数据更新事件通过event channel发送,阻挡多余事件,最后所有subscribers接收事件并改变ListView项目。
162

被折叠的 条评论
为什么被折叠?



