網站首頁 編程語言 正文
前言
昨天的文章,帶大家簡單學習C#中的事件,了解訂閱者和發布者之間的邏輯關聯,也通過小案例進行實際操作,可以看到具體的輸出結果。
目前在工作中,使用Winform桌面開發比較多,很多時候就會用到事件,此時這里的事件用法有一個俗稱叫GUI編程。
在程序運行時,它可以在任何時候被打斷,比如按鈕點擊,按下按鍵或系統定時器。在這些情況發生時,程序需要處理事件然后繼續其他事情。
在Windows GUI編程中經常會用到程序事件的異步處理。
什么是GUI中的標準事件
這種程序事件.NET框架提供一個標準模式。使用System命名空間下的EventHandler委托類型。
public delegate void EventHandler(object sender,EventArgs e)
其中關于聲明EventHandle委托類型,這里需要注意以下三點:
- 第一個參數用于保存觸發事件的對象的引用
- 第二個參數用于保存狀態信息,指明什么類型適用于該應用程序
- 返回類型是void
關于第二個參數類型EventArgs這里特別需要說明下,它不是為了傳遞參數而設計的,當它用于不需要傳遞參數的事件處理程序時該忽略,如果需要傳遞參數那么就必須聲明一個派生自EventArgs的類,使用合適的字段來保存需要傳遞的數據
不管參數使用的實際類型是什么,Object類和EventArgs類都是基類。這樣EventHandler就可提供一個對所有事件和事件處理器都通用的簽名,只有兩個參數,而不是各自都有不同的簽名。
標準事件的用法
這里還繼續對昨天文章中的案例進行修改,阿輝訂閱了報社的報紙,當報社發報時,阿輝就能收到報紙進行閱讀。
這里需要注意:
- 聲明系統定義時使用EventHandler替換Handler
- 阿輝訂閱者中的事件處理程序簽名應和事件委托的簽名匹配(不傳遞數據時可忽略)
- 觸發事件的代碼在調用時必須使用適當的參數類型對象
報社
/// <summary> /// 報社 /// </summary> class NewspaperOffice { public event EventHandler StartPublishPaper; //1、聲明事件 public void Publish() { Console.WriteLine("已發布報紙!"); StartPublishPaper(this,null); //3、觸發事件,通知訂閱者收報紙進行閱讀 } }
阿輝訂閱者
/// <summary> /// 阿輝 訂閱者 /// </summary> class AhuiPeople { public AhuiPeople(NewspaperOffice npo) { npo.StartPublishPaper += SubscriptinPaper; //2、訂閱事件 } void SubscriptinPaper(object sender,EventArgs e) { Console.WriteLine("阿輝接收到報紙,開始閱讀!"); } }
觸發事件開始發報
static void Main(string[] args) { NewspaperOffice npo = new NewspaperOffice(); AhuiPeople ahuiPeople = new AhuiPeople(npo); //報社發報 Console.WriteLine("報社計劃開始發報!"); npo.Publish(); Console.ReadKey(); }
輸出結果
這里簡單介紹標準的GUI編程中的事件,沒有用于傳遞參數。下一篇文章將介紹如何通過標準事件來傳遞參數用于Winform中的異步處理。
原文鏈接:https://blog.csdn.net/sinat_23966857/article/details/122723954
相關推薦
- 2024-03-09 【Redis】Redis 實現分布式Session
- 2022-12-22 C/C++?活動預處理器詳解_C 語言
- 2022-06-16 C#深拷貝方法探究及性能比較(多種深拷貝)_C#教程
- 2022-12-05 useReducer?createContext代替Redux原理示例解析_React
- 2022-10-24 centos編譯安裝mariadb的詳細過程_mariadb
- 2022-09-21 LyScript獲取上一條與下一條匯編指令的方法詳解_python
- 2022-12-10 Input系統之InputReader處理合成事件詳解_Android
- 2022-12-29 R語言apply系列函數實例詳解_R語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支