
C# Zdarzenia (Jak to działa dla deweloperów)
Zdarzenia w C# są fundamentalną częścią programowania zdarzeniowego. Pozwalają one obiektom komunikować się i powiadamiać innych, gdy dzieje się coś interesującego. W tym przewodniku zbadamy zdarzenia oraz sposób ich deklarowania i używania. Rozłóżmy to na etapy, aby zapewnić jasne zrozumienie. Przyjrzymy się również IronPDF dla operacji PDF w aplikacjach C#.
Czym są zdarzenia w C#?
Zdarzenia w C# umożliwiają komunikację między obiektami. Gdy zdarzenie jest wywoływane, inne obiekty mogą na nie reagować. Zdarzenia opierają się na delegatach, którzy działają jako bezpieczne typy wskaźników do metod. Typ delegata zdarzenia definiuje sygnaturę metod, które mogą obsługiwać publiczne zdarzenie, zapewniając spójność w obsłudze danych zdarzenia.
Podstawowe komponenty zdarzeń
Aby w pełni zrozumieć zdarzenia, przyjrzyjmy się ich głównym komponentom:
1. Klasa Wydawcy
Klasa wydawcy jest źródłem zdarzenia. Jest odpowiedzialna za deklarowanie zdarzenia i wywoływanie go, gdy wystąpi konkretne działanie lub warunek. Proces ten zazwyczaj obejmuje metodę obsługi zdarzeń w celu określenia, kiedy zdarzenie występuje. Wydawca używa również delegata zdarzenia do określenia sygnatury metod, które mogą obsługiwać zdarzenie. Na przykład, w interfejsie graficznym (GUI) kontrolka przycisku działa jako wydawca, gdy generuje zdarzenie "Click".
2. Klasa Subskrybenta
Klasa subskrybenta nasłuchuje zdarzeń i reaguje na nie. Subskrybent rejestruje swoje zainteresowanie zdarzeniem, dołączając metodę obsługi zdarzenia do zdarzenia. Gdy wydawca wywołuje zdarzenie, metoda obsługi zdarzeń subskrybenta jest wykonywana. Jedno zdarzenie może mieć wielu subskrybentów, z których każdy reaguje inaczej, gdy zdarzenie wystąpi.
3. Delegaty
Delegaty są fundamentem dla zdarzeń w C#. Stanowią bezpieczne typy wskaźników do metod i definiują kontrakt, który muszą przestrzegać wszyscy obsługujący zdarzenia. Delegaty zapewniają, że tylko metody o określonej sygnaturze mogą obsługiwać zdarzenie, zapewniając spójny i bezbłędny system obsługi zdarzeń.
4. Obsługujące Zdarzenia
Obsługujące zdarzenia to metody w klasie subskrybenta, które są wykonywane, gdy zdarzenie jest wywoływane. Zawierają one logikę obsługi zdarzeń, takich jak aktualizacja interfejsu użytkownika, logowanie danych lub wykonywanie obliczeń. Sygnatura obsługującej zdarzenie musi odpowiadać typowi delegata związanym z tym zdarzeniem. Dodatkowo, inne klasy mogą używać obsługujących zdarzeń do reagowania na wspólne zdarzenia. Ułatwia to implementację zdarzeń w sposób modułowy i reużywalny.
5. Dane Zdarzeń
W wielu przypadkach zdarzenia muszą przekazywać dodatkowe informacje subskrybentom. Osiąga się to poprzez klasy danych zdarzeń, które są pochodnymi z bazowej klasy EventArgs. Dane zdarzeń zawierają szczegółowe informacje o zdarzeniu, takie jak wiadomość, status lub inne istotne informacje.
How to Declare and Use Events in C#
Krok 1: Deklaracja Delegata
Delegaty definiują sygnaturę metod dla obsługujących zdarzenia. W tym przykładzie tworzymy delegata do reprezentowania programu obsługi zdarzeń z dwoma parametrami: object sender i EventArgs e.
public delegate void MyEventHandler(object sender, EventArgs e);Public Delegate Sub MyEventHandler(ByVal sender As Object, ByVal e As EventArgs)Krok 2: Deklaracja Zdarzenia
Zdarzenia są deklarowane przy użyciu słowa kluczowego event i bazują na typie delegata. Oto przykład:
public class Publisher
{
public event MyEventHandler Notify; // Declare the event.
}Public Class Publisher
Public Event Notify As MyEventHandler ' Declare the event.
End ClassKrok 3: Wywołanie Zdarzenia
Zdarzenie wywoływane jest poprzez wywołanie delegata i przekazanie niezbędnych parametrów.
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 SubKrok 4: Subskrybowanie Zdarzenia
Subskrybenci rejestrują programy obsługi zdarzeń przy użyciu operatora +=:
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.Krok 5: Obsługa Zdarzenia
Obsługująca zdarzenie jest metodą w klasie subskrybenta, która odpowiada sygnaturze delegata:
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 SubIronPDF: biblioteka PDF dla języka C#
IronPDF, wszechstronna biblioteka do pracy z PDF w .NET, bezproblemowo integruje się z aplikacjami C#. W połączeniu z zdarzeniami w C# może oferować dynamiczny sposób obsługi scenariuszy w czasie rzeczywistym, takich jak aktualizacje postępu, obsługa błędów czy powiadomienia podczas generowania lub manipulacji PDF. Przyjrzyjmy się temu związkowi w angażujący sposób. W C#, zdarzenia są sposobem na sygnalizowanie, że coś się wydarzyło. Pozwalają jednej części programu powiadamiać inne części o określonych zdarzeniach, takich jak przetwarzanie pliku, ukończenie zadania czy napotkanie błędu.
Jak pasuje IronPDF?
IronPDF pozwala generować, modyfikować i zabezpieczać PDF-y, a integracja z nowoczesnymi zdarzeniami może uczynić aplikację bardziej interaktywną. Na przykład:
- Śledzenie postępu: Powiadamiaj subskrybentów o procentowym ukończeniu, gdy generujesz duży raport PDF.
- Obsługa błędów: Wywołaj zdarzenie, gdy pojawi się problem podczas renderowania lub zapisu PDF.
- Akcje niestandardowe: Wykonuj niestandardową logikę, taką jak logowanie czy aktualizacje interfejsu użytkownika po określonych operacjach PDF.
Przykład: Generowanie PDF ze Zdarzeniami
Oto prosty przykład demonstrujący użytkowanie IronPDF ze zdarzeniami:
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
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 ProgressUpdated, AddressOf DisplayProgress
Console.WriteLine("Generating PDF...")
GeneratePdf() ' Generate the PDF
End Sub
' Method to generate PDF and trigger progress updates
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) ' Trigger event with progress value
Next
' Generate a PDF
Dim PdfDocument = Renderer.RenderHtmlAsPdf("<h1>Hello, IronPDF with Events!</h1>")
PdfDocument.SaveAs("IronPDF/example.pdf")
RaiseEvent ProgressUpdated(100) ' Final update
Console.WriteLine("PDF generated successfully!")
Catch ex As Exception
Console.WriteLine($"Error: {ex.Message}")
End Try
End Sub
' Event handler to display progress
Shared Sub DisplayProgress(progress As Integer)
Console.WriteLine($"Progress: {progress}%")
End Sub
End Class
Wnioski

Zdarzenia w C# w połączeniu z IronPDF tworzą potężny system do dynamicznego generowania i zarządzania PDF. Zdarzenia zapewniają czysty, wydajny sposób obsługi operacji PDF asynchronicznie, podczas gdy IronPDF oferuje solidne funkcje do tworzenia, edycji i manipulacji PDF na platformach .NET. IronPDF oferuje bezpłatną wersję próbną, aby przetestować wszystkie funkcje bez ograniczeń. Licencje komercyjne zaczynają się od $999 i zapewniają dostęp do pełnego zestawu możliwości generowania i przetwarzania PDF.

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczącą ponad 50 osób, obsługującą NASA, Teslę i światowe agencje rządowe.
Powiązane artykuły


