簡單探討C#中GUI程式設計的標準事件問題

大雄45發表於2022-02-10
導讀 這篇文章主要介紹了C#中GUI程式設計的標準事件,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑑價值,需要的朋友可以參考下
前言

昨天的文章,帶大家簡單學習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

阿輝訂閱者中的事件處理程式簽名應和事件委託的簽名匹配(不傳遞資料時可忽略)

觸發事件的程式碼在呼叫時必須使用適當的引數型別物件

報社
////// 報社
   ///class NewspaperOffice 
   {
       public event EventHandler StartPublishPaper;                //1、宣告事件
 
       public void Publish()
       {
           Console.WriteLine("已釋出報紙!");
           StartPublishPaper(this,null);               //3、觸發事件,通知訂閱者收報紙進行閱讀
       }
   }
阿輝訂閱者
////// 阿輝 訂閱者
   ///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();
       }
輸出結果

簡單探討C#中GUI程式設計的標準事件問題簡單探討C#中GUI程式設計的標準事件問題

這裡簡單介紹標準的GUI程式設計中的事件,沒有用於傳遞引數。下一篇文章將介紹如何通過標準事件來傳遞引數用於Winform中的非同步處理。

到此這篇關於C#中GUI程式設計的標準事件的文章就介紹到這了

原文來自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2855085/,如需轉載,請註明出處,否則將追究法律責任。

相關文章