跳至頁尾內容
.NET幫助

C# 事件 (如何為開發人員運作)

C#中的事件是事件驅動程式設計的基本部分。 它們允許物件在發生值得注意的事情時進行溝通及通知其他物件。 在本指南中,我們將探討事件,以及如何宣告和使用它們。 讓我們一步一步地分解它,以確保明確理解。 我們還將探索IronPDF在C#應用程式中的PDF操作。

什麼是C#中的事件?

C#中的事件實現了物件之間的通信。 當事件發生時,其他物件可以對它做出響應。 事件依賴委派,它作為到方法的型別安全指標。 事件委派型別定義可以處理公共事件的方法簽名,確保事件資料處理的一致性。

事件的核心組成部分

為了充分了解事件,我們來看一下它們的主要組成部分:

1. 發布者類

發布者類是事件的來源。 它負責宣告事件,並在特定動作或條件發生時觸發它。 此過程通常包括一個事件處理方法來確定事件的發生時間。 發布者還使用事件委派來定義可以處理該事件的方法的簽名。 例如,在圖形使用者介面 (GUI) 中,按鈕控制元件在觸發"點擊"事件時充當發布者。

2. 訂閱者類

訂閱者類監聽事件並對其作出反應。 訂閱者通過將事件處理方法附加到事件來註冊對事件的興趣。 當發布者觸發事件時,訂閱者的事件處理方法將執行。 單個事件可以有多個訂閱者,每個訂閱者在事件發生時都會以不同的方式響應。

3. 委派

委派是C#中事件的基礎。 它們是對方法的型別安全指標,並定義所有事件處理程式必須遵循的協定。 委派確保只有具有特定簽名的方法才能處理該事件,提供一致且無錯誤的事件處理機制。

4. 事件處理程式

事件處理程式是訂閱者類中的方法,在觸發事件時被執行。 它們包含處理事件的邏輯,如更新UI、記錄資料或進行計算。 事件處理程式的簽名必須與與事件關聯的委派型別匹配。 此外,其他類別也可以使用事件處理程式來響應共享事件。 這使得以模塊化和可重用的方式實現事件變得更加容易。

5. 事件資料

在許多情況下,事件需要向訂閱者傳達額外的資訊。 這是使用事件資料類實現的,該類是從基礎 EventArgs 類派生的。 事件資料包含有關事件的具體細節,如訊息、狀態或其他相關資訊。

How to Declare and Use Events in C

步驟1:宣告委派

委派定義事件處理程式的方法簽名。 在此範例中,我們建立了一個委派來表示具有兩個參數的事件處理程式:EventArgs e

public delegate void MyEventHandler(object sender, EventArgs e);
public delegate void MyEventHandler(object sender, EventArgs e);
Public Delegate Sub MyEventHandler(ByVal sender As Object, ByVal e As EventArgs)
$vbLabelText   $csharpLabel

步驟2:宣告事件

事件使用event關鍵字聲明,並基於委派型別。 這裡有一個範例:

public class Publisher
{
    public event MyEventHandler Notify; // Declare the event.
}
public class Publisher
{
    public event MyEventHandler Notify; // Declare the event.
}
Public Class Publisher
	Public Event Notify As MyEventHandler ' Declare the event.
End Class
$vbLabelText   $csharpLabel

步驟3:觸發事件

事件是通過調用委派並傳遞必要的參數來觸發的。

public void TriggerEvent()
{
    if (Notify != null) // Check if there are subscribers.
    {
        Notify(this, EventArgs.Empty); // Raise the event.
    }
}
public void TriggerEvent()
{
    if (Notify != null) // Check if there are subscribers.
    {
        Notify(this, EventArgs.Empty); // Raise the event.
    }
}
Public Sub TriggerEvent()
	If Notify IsNot Nothing Then ' Check if there are subscribers.
		Notify(Me, EventArgs.Empty) ' Raise the event.
	End If
End Sub
$vbLabelText   $csharpLabel

步驟4:訂閱事件

訂閱者使用+=運算符註冊事件處理程式:

Publisher publisher = new Publisher();
Subscriber subscriber = new Subscriber();
publisher.Notify += subscriber.OnNotify; // Subscribe to the event.
Publisher publisher = new Publisher();
Subscriber subscriber = new Subscriber();
publisher.Notify += subscriber.OnNotify; // Subscribe to the event.
Dim publisher As New Publisher()
Dim subscriber As New Subscriber()
publisher.Notify += subscriber.OnNotify ' Subscribe to the event.
$vbLabelText   $csharpLabel

步驟5:處理事件

事件處理器是訂閱者類中的一個方法,與委派的簽名匹配:

public void OnNotify(object sender, EventArgs e)
{
    Console.WriteLine("Event received!");
}
public void OnNotify(object sender, EventArgs e)
{
    Console.WriteLine("Event received!");
}
Public Sub OnNotify(ByVal sender As Object, ByVal e As EventArgs)
	Console.WriteLine("Event received!")
End Sub
$vbLabelText   $csharpLabel

IronPDF:C# PDF程式庫

IronPDF是一個用於.NET生成PDF的多功能程式庫,可以無縫整合到C#應用程式中。 結合C#中的事件,它可以提供一種動態方式來處理實時情景,如進度更新、錯誤處理或在PDF生成或操作期間的通知。 讓我們引人入勝地探索這種關係。 在C#中,事件是一種表示有事情發生的方式。 它們允許您的程式的一部分通知其他部分關於特定事件的發生,如文件被處理、任務完成或遇到錯誤。

IronPDF如何適應?

IronPDF允許您生成、修改和保護PDF,將其與事件整合可以使您的應用程式更加互動。例如:

  • 進度跟蹤:在生成大型PDF報告時,通知訂戶完成百分比。
  • 錯誤處理:如果在PDF渲染或保存期間出現問題,觸發一個事件。
  • 自訂操作:在特定的PDF操作後執行自訂邏輯,例如記錄或UI更新。

範例:生成具有事件通知的PDF

這裡有一個簡單的例子,展示如何使用IronPDF與事件:

using IronPdf;
using System;

// Program class
class Program
{
    // Define a custom event for progress updates
    public static event Action<int> ProgressUpdated;

    public static void Main()
    {
        License.LicenseKey = "License-Key";
        // Subscribe to the ProgressUpdated event
        ProgressUpdated += DisplayProgress;

        Console.WriteLine("Generating PDF...");
        GeneratePdf(); // Generate the PDF
    }

    // Method to generate PDF and trigger progress updates
    static void GeneratePdf()
    {
        try
        {
            var Renderer = new ChromePdfRenderer();
            for (int i = 0; i <= 100; i += 20)
            {
                // Simulate progress
                System.Threading.Thread.Sleep(500);
                ProgressUpdated?.Invoke(i); // Trigger event with progress value
            }
            // Generate a PDF
            var PdfDocument = Renderer.RenderHtmlAsPdf("<h1>Hello, IronPDF with Events!</h1>");
            PdfDocument.SaveAs("IronPDF/example.pdf");
            ProgressUpdated?.Invoke(100); // Final update
            Console.WriteLine("PDF generated successfully!");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }

    // Event handler to display progress
    static void DisplayProgress(int progress)
    {
        Console.WriteLine($"Progress: {progress}%");
    }
}
using IronPdf;
using System;

// Program class
class Program
{
    // Define a custom event for progress updates
    public static event Action<int> ProgressUpdated;

    public static void Main()
    {
        License.LicenseKey = "License-Key";
        // Subscribe to the ProgressUpdated event
        ProgressUpdated += DisplayProgress;

        Console.WriteLine("Generating PDF...");
        GeneratePdf(); // Generate the PDF
    }

    // Method to generate PDF and trigger progress updates
    static void GeneratePdf()
    {
        try
        {
            var Renderer = new ChromePdfRenderer();
            for (int i = 0; i <= 100; i += 20)
            {
                // Simulate progress
                System.Threading.Thread.Sleep(500);
                ProgressUpdated?.Invoke(i); // Trigger event with progress value
            }
            // Generate a PDF
            var PdfDocument = Renderer.RenderHtmlAsPdf("<h1>Hello, IronPDF with Events!</h1>");
            PdfDocument.SaveAs("IronPDF/example.pdf");
            ProgressUpdated?.Invoke(100); // Final update
            Console.WriteLine("PDF generated successfully!");
        }
        catch (Exception ex)
        {
            Console.WriteLine($"Error: {ex.Message}");
        }
    }

    // Event handler to display progress
    static void DisplayProgress(int progress)
    {
        Console.WriteLine($"Progress: {progress}%");
    }
}
Imports IronPdf
Imports System

' Program class
Friend Class Program
	' Define a custom event for progress updates
	Public Shared Event ProgressUpdated As Action(Of Integer)

	Public Shared Sub Main()
		License.LicenseKey = "License-Key"
		' Subscribe to the ProgressUpdated event
		AddHandler Me.ProgressUpdated, AddressOf DisplayProgress

		Console.WriteLine("Generating PDF...")
		GeneratePdf() ' Generate the PDF
	End Sub

	' Method to generate PDF and trigger progress updates
	Private Shared Sub GeneratePdf()
		Try
			Dim Renderer = New ChromePdfRenderer()
			For i As Integer = 0 To 100 Step 20
				' Simulate progress
				System.Threading.Thread.Sleep(500)
				RaiseEvent ProgressUpdated(i)
			Next i
			' Generate a PDF
			Dim PdfDocument = Renderer.RenderHtmlAsPdf("<h1>Hello, IronPDF with Events!</h1>")
			PdfDocument.SaveAs("IronPDF/example.pdf")
			RaiseEvent ProgressUpdated(100)
			Console.WriteLine("PDF generated successfully!")
		Catch ex As Exception
			Console.WriteLine($"Error: {ex.Message}")
		End Try
	End Sub

	' Event handler to display progress
	Private Shared Sub DisplayProgress(ByVal progress As Integer)
		Console.WriteLine($"Progress: {progress}%")
	End Sub
End Class
$vbLabelText   $csharpLabel

C#事件(對開發者的工作原理):圖1 - 輸出

結論

C#事件(對開發者的工作原理):圖2 - 授權

C#中的事件與IronPDF結合時,形成了一個強大的系統,用於動態PDF生成和管理。 事件提供了一種乾淨、高效的方法來異步處理PDF操作,而IronPDF則提供了跨.NET平台的PDF建立、編輯和操作的強大功能。 IronPDF提供免費試用,以測試所有功能而無限制。 商業授權起價$999,提供對完整的PDF生成和處理能力套件的存取。

常見問題

我如何在我的應用程式中實現C#事件?

要實現C#事件,您需要定義一個指定事件處理程式簽名的委派,使用此委派宣告事件,在適當時間觸發事件,並使用符合委派簽名的方法訂閱事件。

C#事件的核心組件是什麼?

C#事件的核心組件包括:聲明並觸發事件的發布者;監聽事件的訂閱者;作為型別安全方法指標的委派;觸發事件時執行的事件處理程式;以及向訂閱者傳遞事件資訊的事件資料。

PDF程式庫如何增強C#事件處理?

像IronPDF這樣的PDF程式庫可以通過允許您將事件驅動通知整合到PDF處理任務中來增強C#事件處理。這可以包括實時進度更新、錯誤通知和在某些PDF操作後執行自訂邏輯。

委派如何支持C#中的事件處理?

C#中的委派支持事件處理,通過定義事件處理程式必須遵循的方法簽名。它們確保只有具有正確簽名的方法可以用來處理事件,從而保持型別安全性和一致性。

事件處理程式在C#事件中起什麼作用?

事件處理程式是在事件被觸發時執行的方法。它們包含處理事件所需的邏輯,必須符合與事件相關的委派所定義的簽名。

C#事件如何用於動態PDF生成?

C#事件可以通過將事件驅動通知整合到過程中用於動態PDF生成。這使您可以在使用例如IronPDF的程式庫進行PDF建立時跟蹤進度、處理錯誤和執行自訂操作。

在C#中觸發事件有哪些步驟?

要在C#中觸發事件,您需要首先使用委派聲明事件。然後,在發布者類中,在特定條件滿足時通過調用該事件來觸發事件。已附加事件處理程式的訂閱者將響應執行其相應的方法。

C#事件如何改善.NET應用程式中的PDF處理?

C#事件通過啟用PDF操作的非同步處理來改善.NET應用程式中的PDF處理。這允許實時更新、錯誤檢測和自訂邏輯的調用,使PDF管理過程更加動態和響應。

Jacob Mellor,首席技術官 @ Team Iron
首席技術官

Jacob Mellor是Iron Software的首席技術官,一位在C# PDF技術上開創先河的遠見工程師。作為Iron Software核心程式碼庫的原開發者,他從創立以來就一直在塑造公司的產品架構,與首席執行官Cameron Rimington一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。

Jacob擁有曼徹斯特大學的土木工程一等榮譽學士學位(BEng),於1998-2001年之間獲得。在1999年於倫敦創辦他的第一家軟體公司並於2005年建立了他的第一批.NET元組件後,他專注於解決Microsoft生態系統中的複雜問題。

他的旗艦IronPDF和Iron Suite .NET程式庫在全球獲得了超過3000萬次NuGet安裝依據,他的基礎程式碼基繼續支援著世界各地開發者使用的工具。擁有25年的商業經驗和41年的程式設計專業知識,他仍專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

Iron 支援團隊

我們線上24小時,每週5天。
聊天
電子郵件
給我打電話