国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > 綜合 > 正文

使用Publish/Subscribe 設計模式達到對象間數(shù)據(jù)同步(二)

2024-07-21 02:23:35
字體:
來源:轉載
供稿:網(wǎng)友

在注冊處理期間,subscriber被分配一個獨特的標記,用來在event channel中標識subscriber。event channel也使用這個標記索引那些subscriber。 雖然樣品應用作為標記目標的雜亂脈沖干擾電碼使用,我推薦在你的自己的程序里使用另一個方法產(chǎn)生一個獨特的標識符 ( 例如產(chǎn)生一guid)。

使用目錄菜單建立3到4個frmlist窗口實例。使用新的目錄菜單選項創(chuàng)作frmlist 的3 或者4 個實例,然后在其中一個窗口中選擇一個條目,雙擊這個條目進入可編輯模式,鍵入一個新的名字。窗體建立一個描述數(shù)據(jù)更新的事件并通過event channel發(fā)送。

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
發(fā)送事件的窗體證實它是事件的創(chuàng)始人;并將clsdataevent類的origin屬性設置為它自己。這樣可以阻擋其他多余的事件,以確保發(fā)送者接收到的事件都是已經(jīng)發(fā)布過的。最后,事件的發(fā)布者注意到了數(shù)據(jù)的改變。

所有的subscribers將收到事件。在eventapp 中,每個frmlist 的實例將收到事件并且改變每個listview中的發(fā)生變化的項目:

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

這種事件系統(tǒng)類型將給你帶來很大的靈活性。你可以使在應用程序中的任何一個
對象發(fā)布事件,只有那些對此感興趣的對象的到更新的信息。也可以改變event
channel類的實現(xiàn)方式, 如可以通過使用web service或者消息系統(tǒng)(如ms
message queue 或者 ibm mq 系列),通過 http協(xié)發(fā)送事件。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 兰西县| 静乐县| 常山县| 盐亭县| 淮南市| 吉水县| 萝北县| 济源市| 昌江| 木里| 浦北县| 苍溪县| 铜陵市| 湾仔区| 新乐市| 聂拉木县| 平远县| 白山市| 香格里拉县| 杭锦后旗| 保亭| 漳平市| 淮南市| 蚌埠市| 林周县| 桓台县| 民县| 岚皋县| 张家口市| 板桥市| 军事| 溆浦县| 巨野县| 大同市| 宜兰县| 五常市| 汤阴县| 乳山市| 兖州市| 余庆县| 祁阳县|