欢迎光临
我们一直在努力

使用Publish/Subscribe 设计模式达到对象间数据同步(二)-.NET教程,数据库应用

建站超值云服务器,限时71元/月

在注册处理期间,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协发送事件。

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 使用Publish/Subscribe 设计模式达到对象间数据同步(二)-.NET教程,数据库应用
分享到: 更多 (0)