您可以在这里快速查找:


 
您的位置: 编程学习 > asp.net教程 > 200508
文章分类

Java技术
2005: 03 04 05 06 07 08
09 10 11 12
2006: 01 02

Asp.net
2005: 07 08 09 10 11 12
2006: 01 02

VB编程
2006: 02

Asp编程
2005: 11 12
2006: 01 02

C++/VC
2005: 10 11 12
2006: 01 02

Delphi
2005: 12
2006: 01 02

其它

 本文章适合所有读者

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

guoyan19811021

在注册处理期间,subscriber被分配一个独特的标记,用来在event channel中标识subscriberevent channel也使用这个标记索引那些subscriber。 虽然样品应用作为标记目标的杂乱脉冲干扰电码使用,我推荐在你的自己的程序里使用另一个方法产生一个独特的标识符 ( 例如产生一GUID)。

使用目录菜单建立34frmList窗口实例。使用新的目录菜单选项创作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 IfEnd 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 SelectEnd Sub 
       这种事件系统类型将给你带来很大的灵活性。你可以使在应用程序中的任何一个
对象发布事件,只有那些对此感兴趣的对象的到更新的信息。也可以改变Event 
Channel类的实现方式, 如可以通过使用Web service或者消息系统(如MS 
Message Queue 或者 IBM MQ 系列),通过 HTTP协发送事件。