跳過到頁腳內容
.NET幫助

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

C# 中的事件是事件驅動程式設計的基本部分。 這些工具允許物件進行溝通,並在發生感興趣的事情時通知其他人。 在本指南中,我們將探討事件以及如何宣告和使用事件。 讓我們逐步分解,以確保清楚瞭解。 我們也將探討 IronPDF 在 C# 應用程式中的 PDF 作業。

什麼是 C# 中的事件?

C# 中的事件可讓物件之間進行通訊。 當事件產生時,其他物件可以對事件做出回應。 事件依賴於委託,而委託則是方法的類型安全指針。 事件委託類型定義了可以處理公共事件的方法的簽章,確保事件資料處理的一致性。

活動的核心元件

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

1.發行者類別

發佈人類別是事件的來源。 它負責宣告事件,並在特定動作或條件發生時提出事件。 此過程中通常會使用事件處理器方法來判斷事件發生的時間。 發佈者也使用事件委託來定義能夠處理事件的方法的簽章。 舉例來說,在圖形使用者介面 (GUI) 中,按鈕控件在產生"Click"事件時會扮演發佈者的角色。

2.訂閱者類別

subscriber 類別監聽事件並對事件做出反應。 訂閱者透過附加事件處理方法至事件,來註冊其對事件的興趣。 當發佈者提出事件時,訂閱者的事件處理器方法會執行。 單一事件可以有多個訂閱者,每個訂閱者在事件發生時的反應都不同。

3.代表。

委託是 C# 中事件的基礎。 它們是方法的類型安全指針,並定義了所有事件處理程式必須遵循的契約。 委託確保只有具有特定簽章的方法才能處理事件,提供一致且無錯誤的事件處理機制。

4.事件處理程式

事件處理器是訂閱者類別中的方法,當事件被觸發時會被執行。 它們包含處理事件的邏輯,例如更新 UI、記錄資料或執行計算。 事件處理程式的簽章必須與事件相關的委託類型相符。 此外,其他類別也可以使用事件處理器來反應共用事件。 它使以模組化和可重複使用的方式實作事件變得更容易。

5.事件資料

在許多情況下,事件需要傳達給訂閱者額外的資訊。 這是使用 事件資料類別來實現的,這些類別是從基本的 EventArgs 類別衍生出來的。 事件資料包含事件的特定詳細資訊,例如訊息、狀態或其他相關資訊。

如何在 C# 中宣告和使用事件

步驟 1:宣告委託

委派定義事件處理程式的方法簽章。 在這個例子中,我們建立了一個委託來表示事件處理程序,它有兩個參數:object senderEventArgs 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:處理事件

事件處理器是訂閱者類別中符合 delegate 特徵的方法:

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# 中,events 是一種表示事情已發生的信號方式。 這些工具允許您程式的一部分通知其他部分有關特定事件的發生,例如正在處理的檔案、已完成的任務或遇到的錯誤。

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# Events (How it Works for Developers):圖 1 - 輸出

結論

C# Events (How it Works for Developers):圖 2 - 授權

C# 中的事件與 IronPDF 相結合可創造出動態 PDF 生成與管理的強大系統。 Events 提供了一種簡潔、有效率的方式來異步處理 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核心代碼庫的原始開發者,他自公司成立以來就塑造了公司的產品架構,並與CEO Cameron Rimington將公司轉型為服務NASA、Tesla以及全球政府機構的50多人公司。

Jacob擁有曼徹斯特大學土木工程一級榮譽學士學位(1998年–2001年)。他於1999年在倫敦開立首家軟體公司,並於2005年建立了他的第一個.NET組件,專注於解決Microsoft生態系統中的複雜問題。

他的旗艦作品IronPDF和Iron Suite .NET程式庫全球已獲得超過3000萬次NuGet安裝,他的基礎代碼不斷在全球各地驅動開發者工具。擁有25年以上的商業經驗和41年的編碼專業知識,Jacob仍然專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

鋼鐵支援團隊

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