AYUDA .NET

Eventos en C# (Cómo funciona para desarrolladores)

Publicado en 14 de enero, 2025
Compartir:

Eventos en C#son una parte fundamental de la programación orientada a eventos. Permiten que los objetos se comuniquen y notifiquen a otros cuando ocurre algo de interés. En esta guía, exploraremos los eventos y cómo declararlos y utilizarlos. Desglosémoslo paso a paso para asegurar una comprensión clara. También exploraremosIronPDFpara operaciones de PDF en aplicaciones C#.

¿Qué son los eventos en C#?

Los eventos en C# permiten la comunicación entre objetos. Cuando se genera un evento, otros objetos pueden responder a él. Los eventos dependen de los delegados, que actúan como punteros seguros para métodos. Un tipo de delegado de evento define la firma de los métodos que pueden manejar el evento público, asegurando la consistencia en la gestión de los datos del evento.

Componentes esenciales de eventos

Para comprender completamente los eventos, veamos sus componentes principales:

1. Clase Publisher

La clase publisher es la fuente del evento. Es responsable de declarar el evento y activarlo cuando ocurre una acción o condición específica. Este proceso generalmente implica un método manejador de eventos para determinar cuándo ocurre el evento. El editor también utiliza un delegado de evento para definir la firma de los métodos que pueden manejar el evento. Por ejemplo, en una interfaz gráfica de usuario(GUI), un control de botón actúa como el publicador cuando genera un evento "Click".

2. Clase Subscriber

La clase suscriptora escucha eventos y reacciona a ellos. Un suscriptor registra su interés en un evento adjuntando un método de manejo de eventos al mismo. Cuando el publicador desencadena el evento, el método controlador de eventos del suscriptor se ejecuta. Un solo evento puede tener múltiples suscriptores, cada uno respondiendo de manera diferente cuando ocurre el evento.

3. Delegados

Los delegados son la base de los eventos en C#. Son punteros a métodos seguros para tipos y definen el contrato que todos los manejadores de eventos deben seguir. Los delegados aseguran que solo los métodos con una firma específica puedan manejar el evento, proporcionando un mecanismo de manejo de eventos consistente y sin errores.

4. Manejadores de Eventos

Los manejadores de eventos son métodos en la clase suscriptora que se ejecutan cuando se desencadena un evento. Contienen la lógica para manejar el evento, como actualizar la interfaz de usuario, registrar datos o realizar cálculos. La firma de un controlador de eventos debe coincidir con el tipo de delegado asociado al evento. Además, otras clases pueden usar manejadores de eventos para reaccionar a eventos compartidos. Facilita la implementación de eventos de manera modular y reutilizable.

5. Datos del evento

En muchos casos, los eventos necesitan transmitir información adicional a los suscriptores. Esto se logra utilizando clases de datos de eventos, que se derivan de la clase base EventArgs. Los datos del evento contienen detalles específicos sobre el evento, como un mensaje, estado u otra información relevante.

Cómo declarar y usar eventos en C

Paso 1: Declarar un Delegado

Los delegados definen la firma del método para los controladores de eventos. En este ejemplo, creamos un delegado para representar el manejador de eventos con dos parámetros: object sender y 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)
VB   C#

Paso 2: Declarar un evento

Los eventos se declaran utilizando la palabra clave event y se basan en el tipo de delegado. He aquí un ejemplo:

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
VB   C#

Paso 3: Generar el evento

El evento se desencadena llamando al delegado y pasando los parámetros necesarios.

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
VB   C#

Paso 4: Suscribirse al Evento

Los suscriptores registran controladores de eventos utilizando el operador +=:

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.
VB   C#

Paso 5: Manejar el evento

Un controlador de eventos es un método en la clase suscriptora que coincide con la firma del delegado:

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
VB   C#

IronPDF: C# Biblioteca PDF

IronPDF, una biblioteca versátil para trabajar con PDFs en .NET, se integra perfectamente con aplicaciones C#. Combinado con eventos en C#, puede proporcionar una forma dinámica de manejar escenarios en tiempo real como actualizaciones de progreso, gestión de errores o notificaciones duranteGeneración de PDFo manipulación. Exploremos esta relación de manera atractiva. En C#, eventos son una forma de indicar que algo ha ocurrido. Permiten que una parte de su programa notifique a otras partes sobre ocurrencias específicas, como el procesamiento de un archivo, la finalización de una tarea o la aparición de un error.

¿Cómo se ajusta IronPDF?

IronPDF te permite generar, modificar y asegurar PDFs, y al integrarlo con eventos, puedes hacer que tu aplicación sea más interactiva. Por ejemplo:

  • Seguimiento del Progreso: Notifique a los suscriptores sobre el porcentaje de finalización al generar un informe PDF grande.
  • Manejo de Errores: Disparar un evento si surge un problema durante el renderizado o guardado de PDF.
  • Acciones Personalizadas: Ejecuta lógica personalizada, como registro o actualizaciones de la interfaz de usuario, después de operaciones específicas con PDF.

Ejemplo: Generación de un PDF con Notificaciones de Eventos

Aquí tienes un ejemplo sencillo para demostrar el uso de IronPDF con eventos:

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
    public static void Main()
    {
        License.LicenseKey = "License-Key";
        // Subscribe to the ProgressUpdated event
        ProgressUpdated += DisplayProgress;
        Console.WriteLine("Generating PDF...");
        GeneratePdf();
    }
    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}");
        }
    }
    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
    public static void Main()
    {
        License.LicenseKey = "License-Key";
        // Subscribe to the ProgressUpdated event
        ProgressUpdated += DisplayProgress;
        Console.WriteLine("Generating PDF...");
        GeneratePdf();
    }
    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}");
        }
    }
    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 static void Main
	Public Shared Sub Main()
		License.LicenseKey = "License-Key"
		' Subscribe to the ProgressUpdated event
		AddHandler Me.ProgressUpdated, AddressOf DisplayProgress
		Console.WriteLine("Generating PDF...")
		GeneratePdf()
	End Sub
	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
	Private Shared Sub DisplayProgress(ByVal progress As Integer)
		Console.WriteLine($"Progress: {progress}%")
	End Sub
End Class
VB   C#

Eventos en C# (Cómo funciona para desarrolladores): Figura 1 - Salida

Conclusión

Eventos en C# (Cómo funciona para desarrolladores): Figura 2 - Licenciamiento

Los eventos en C# combinados con IronPDF crean un sistema potente para la generación y gestión dinámica de PDFs. Los eventos proporcionan una manera limpia y eficiente de manejar operaciones de PDF de forma asíncrona, mientras que IronPDF ofrece una funcionalidad robusta para la creación, edición y manipulación de PDF en plataformas .NET. IronPDF ofrece unprueba gratuitapara probar todas las funciones sin limitaciones. Las licencias comerciales comienzan en $749 y ofrecen acceso a la suite completa de capacidades de generación y procesamiento de PDF.

< ANTERIOR
C# Enumerable (Cómo funciona para desarrolladores)
SIGUIENTE >
C# Async Await (Cómo funciona para los desarrolladores)