網站首頁 編程語言 正文
前言
昨天的文章,帶大家簡單學習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
相關推薦
- 2022-07-31 教你用python實現一個加密的文字處理器_python
- 2022-04-02 Kotlin中的contract到底有什么用詳解_Android
- 2022-09-18 golang實現文件上傳并轉存數據庫功能_Golang
- 2022-10-28 Django執行python?manage.py?makemigrations報錯的解決方案分享_p
- 2022-01-23 win7下與Virtualbox下的ubuntu11.04共享文件夾
- 2022-08-22 Docker安裝LNMP環境的詳細過程(可部署TP項目)_docker
- 2022-03-03 【css】page-break-after 頁面打印分頁屬性
- 2023-01-30 delphi?判斷字符串是否為純數字組合_Delphi
- 最近更新
-
- 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同步修改后的遠程分支