詳解C#如何實(shí)現(xiàn)一個(gè)安全的事件訂閱器
1.解釋下什么是事件訂閱器
在C#的上下文中,事件訂閱器是一種用于處理特定事件的機(jī)制。
事件(Event):事件是在軟件應(yīng)用程序中發(fā)生的事物,如按鈕被點(diǎn)擊、數(shù)據(jù)被更改等。在C#中,事件是通過(guò)使用event關(guān)鍵字聲明的委托(delegate)來(lái)定義的。DevExpress控件和框架通常會(huì)觸發(fā)各種事件,以便您的應(yīng)用程序能夠?qū)τ脩舻慕换セ蚱渌到y(tǒng)變化做出響應(yīng)。
事件訂閱器: 事件訂閱器是一個(gè)對(duì)象,它訂閱(或監(jiān)聽(tīng))某個(gè)事件,并在事件發(fā)生時(shí)執(zhí)行相應(yīng)的操作。
2.事件訂閱器有什么作用
通知訂閱對(duì)象,告知變化發(fā)生,并把變化發(fā)生時(shí)候的數(shù)據(jù)通知到具體訂閱的委托方法中。
3.示例代碼
我這邊封裝了一個(gè)全局的事件訂閱器,采用一個(gè)靜態(tài)函數(shù)的方法來(lái)實(shí)現(xiàn)全局可以調(diào)用,試用一個(gè)字段存儲(chǔ)當(dāng)前訂閱的消息,防止一個(gè)事件多次訂閱的問(wèn)題。
代碼如下:
public static class EventSubscriber { /// <summary> /// 訂閱消息字典 /// </summary> private static Dictionary<string, SendMessageHandler> MsgDict = new Dictionary<string, SendMessageHandler>(); public delegate void SendMessageHandler(object MsgContent); /// <summary> /// 訂閱消息 /// </summary> /// <param name="name">消息唯一名稱</param> /// <param name="AcceptFunction">接受消息的方法</param> /// <exception cref="Exception"></exception> public static void SubMsg(string name, SendMessageHandler AcceptFunction) { if (!MsgDict.ContainsKey(name)) { MsgDict.Add(name, AcceptFunction); } else { // throw new Exception("已經(jīng)有" + name + "名稱的訂閱"); } } /// <summary> /// 移除指定訂閱消息 /// </summary> /// <param name="name">消息名稱</param> public static void UnSubMsg(string name) { if (MsgDict.ContainsKey(name)) { MsgDict.Remove(name); } } /// <summary> /// 發(fā)送消息 /// </summary> /// <param name="name">消息名稱</param> /// <param name="msgContent">消息內(nèi)容</param> public static void SendMsg(string name, object msgContent) { if (MsgDict.ContainsKey(name)) { MsgDict[name].Invoke(msgContent); } } }
使用方法:
訂閱消息:
EventSubscriber.SubMsg("GetDataTable", SendMessageHandler);
當(dāng)消息通知時(shí)候,獲得事件傳遞過(guò)來(lái)的數(shù)據(jù)并處理
public void SendMessageHandler(object MsgContent) { var data = (DataTable?)MsgContent; TableWait = true; }
到此這篇關(guān)于詳解C#如何實(shí)現(xiàn)一個(gè)安全的事件訂閱器的文章就介紹到這了,更多相關(guān)C#事件訂閱器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#.Net基于正則表達(dá)式抓取百度百家文章列表的方法示例
這篇文章主要介紹了C#.Net基于正則表達(dá)式抓取百度百家文章列表的方法,結(jié)合實(shí)例形式分析了C#獲取百度百家文章內(nèi)容及使用正則表達(dá)式匹配標(biāo)題、內(nèi)容、地址等相關(guān)操作技巧,需要的朋友可以參考下2017-08-08c#中使用BackgroundWorker的實(shí)現(xiàn)
本文主要介紹了c#中使用BackgroundWorker的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06C# 使用WPF 用MediaElement控件實(shí)現(xiàn)視頻循環(huán)播放
在WPF里用MediaElement控件,實(shí)現(xiàn)一個(gè)循環(huán)播放單一視頻的程序,同時(shí)可以控制視頻的播放、暫停、停止。這篇文章給大家介紹了C# 使用WPF 用MediaElement控件實(shí)現(xiàn)視頻循環(huán)播放,需要的朋友參考下吧2018-04-04c#委托把方法當(dāng)成參數(shù)(實(shí)例講解)
本篇文章主要是對(duì)c#委托把方法當(dāng)成參數(shù)的實(shí)例代碼進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-01-01