
C# Olay İşleyici (Geliştiriciler İçin Nasıl Çalışır)
Modern .NET uygulamalarda, olay odaklı programlama, yanıt verirliğin artırılmasında ve sorunsuz kullanıcı deneyimlerinin sağlanmasında önemli bir rol oynamaktadır. PDF oluşturma gibi görevler zaman aldığında, ana iş parçacığını engellemek istemezsiniz. Bunun yerine, görevleri asenkron olarak yürütmek ve bir olay meydana geldiğinde tepki vermek için olay işleyicileri kullanabilirsiniz. Bu, uygulamanızı daha etkileşimli ve duyarlı hale getirir.
Bu kılavuzda, masaüstü ve web ortamlarında sorunsuz PDF iş akışları için IronPDF ile C# olay işleme yöntemlerini nasıl entegre edeceğinizi göstereceğiz. İster WinForms, WPF kullanın, ister başka bir C# programlama dili tabanlı platform kullanıyor olun, bu kılavuz sizin için var.
IronPDF Projenizi Kurma
Olayları ele almadan önce, .NET projenizde IronPDF'i hızlı bir şekilde kurmamıza izin verin.
NuGet ile IronPDF Kurulumu
Visual Studio Paket Yönetici Konsolu'nda çalıştırın:
IronPDF kullanarak PDF oluşturmak için gereken her şeyi yükler.
IronPDF ile Temel PDF Oluşturma
IronPDF'ın çalıştığından emin olmak için hızlı bir örnek:
using IronPdf;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello from IronPDF!</h1>");
pdf.SaveAs("example.pdf");Imports IronPdf
Private renderer = New ChromePdfRenderer()
Private pdf = renderer.RenderHtmlAsPdf("<h1>Hello from IronPDF!</h1>")
pdf.SaveAs("example.pdf")Bu çalıştığında, olay alanları ekleyebilir, kayıtlı delegeleri bağlayabilir ve olay odaklı iş akışları oluşturmak için delege türlerini kullanabilirsiniz.
.NET Geliştiricileri için C# Olay İşleyici Temelleri
Olay Odaklı Programlamanın Temelleri
Olay odaklı programlama ile uygulamanız bir olay meydana geldiğinde yanıt verir, örneğin bir PDF'nin oluşturulmasını tamamladığında. C#, tür güvenli işlev göstericileri olarak delegeleri kullanır ve uygulamanızın nasıl tepki vermesi gerektiğini tanımlamanıza olanak sağlar.
Genellikle olayları event anahtar kelimesi kullanarak ilan eder, olay işleme yöntemlerine bağlar ve özel EventArgs alt sınıflarını kullanarak veri iletirsiniz.
Event Anahtar Kelimesi ile Olay İlan Etme
C#, event üyelerini ilan etmek için event anahtar kelimesini kullanır. Örneğin:
public event EventHandler PdfGenerated;Public Event PdfGenerated As EventHandlerBu satır, PdfGenerated adında bir olay alanı ilan eder. Bu olay, olaylar için .NET'te adlandırma deseni olarak bilinen şu parametre listesine sahip yerleşik bir delege olan EventHandler kullanır: (object sender, EventArgs e).
C#'da Olayları Tanımlama ve Abone Olma
Delegeler Kullanarak Olaylara Metod Ekleme
C# olayları, çalışma saatinde dinamively yöntem eklemeyi += syntax aracılığıyla destekler. İşte nasıl yapılacağı:
pdfService.PdfGenerated += (s, e) =>
{
Console.WriteLine("PDF was generated!");
};AddHandler pdfService.PdfGenerated, Sub(s, e)
Console.WriteLine("PDF was generated!")
End SubBu abone sınıfı, PdfGenerated olayını dinler ve tetiklendiğinde bir yöntem çağrısı yapar.
Özel Olay Verileri
Oluşturulan dosya yolu gibi olay verilerini iletmek için EventArgs sınıfından türetilmiş bir sınıf tanımlayın:
public class PdfGeneratedEventArgs : EventArgs
{
public string FilePath { get; set; } // returned value
}Public Class PdfGeneratedEventArgs
Inherits EventArgs
Public Property FilePath() As String ' - returned value
End ClassDaha sonra olayı, generic delege türü kullanarak yeniden tanımlayın:
public event EventHandler<PdfGeneratedEventArgs> PdfGenerated;Public Event PdfGenerated As EventHandler(Of PdfGeneratedEventArgs)Bu size, olay tetiklendiğinde güçlü, tür güvenli veriler sağlar ve tepki mantığınızı daha güçlü kılar.
Birden Çok Olayı Ele Alma
Birden çok olay tanımlayabilirsiniz:
public event EventHandler PdfGenerationStarted;
public event EventHandler<PdfGeneratedEventArgs> PdfGenerationCompleted;Public Event PdfGenerationStarted As EventHandler
Public Event PdfGenerationCompleted As EventHandler(Of PdfGeneratedEventArgs)Her olay alanı, bir abone sınıfı tarafından ele alınır, böylece her aşama için farklı olay işleyici yöntemleri sağlayabilirsiniz. Bu, karmaşık iş akışlarında mantıklı bir ayrım sağlar.
IronPDF ile Olay İşleyicileri Kullanma
Büyük PDF'ler oluştururken, IronPDF'i bir arka plan iş parçacığında çalıştırmak ve tamamlandığında kullanıcı arayüzüne bildirmek mantıklıdır. İşte olay odaklı tasarımın nasıl yardımcı olabileceği:
- PDF'leri asenkron olarak oluşturmak için bir BackgroundWorker kullanın
- Her aşama tamamlandığında olayları tetikleyin
- Sonuç verilerini olay verisi nesneleri aracılığıyla iletin
Kod Örneği – PDF'leri Asenkron Olarak Oluşturma
Aşağıdaki örnek, IronPDF ile olay işleme kullanımına dair tam kodu göstermektedir:
using System;
using System.ComponentModel;
using IronPdf;
namespace IronPdfEventHandlerExample
{
// 1. Define custom EventArgs to carry event data
public class PdfGeneratedEventArgs : EventArgs
{
public string FilePath { get; set; }
}
// 2. Main class with event, BackgroundWorker, and logic
public class PdfGenerator
{
// Declare the public event using EventHandler<t>
public event EventHandler<PdfGeneratedEventArgs> PdfGenerated;
private readonly BackgroundWorker _worker;
public PdfGenerator()
{
_worker = new BackgroundWorker();
_worker.DoWork += OnDoWork;
_worker.RunWorkerCompleted += OnRunWorkerCompleted;
}
// Start the async operation
public void GenerateAsync(string html, string outputPath)
{
_worker.RunWorkerAsync(new Tuple<string, string>(html, outputPath));
}
// Perform PDF generation in background
private void OnDoWork(object sender, DoWorkEventArgs e)
{
var (html, path) = (Tuple<string, string>)e.Argument;
var renderer = new HtmlToPdf();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(path);
e.Result = path;
}
// Notify subscribers when the PDF is ready
private void OnRunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
var path = e.Result as string;
PdfGenerated?.Invoke(this, new PdfGeneratedEventArgs { FilePath = path });
}
}
// 3. Program to wire it all together
class Program
{
public static void Main(string[] args)
{
var generator = new PdfGenerator();
// Subscribe to the PdfGenerated event
generator.PdfGenerated += OnPdfGenerated;
Console.WriteLine("Generating PDF asynchronously...");
generator.GenerateAsync("<h1>Hello, IronPDF!</h1>", "output.pdf");
Console.WriteLine("Press any key to exit after generation.");
Console.ReadKey();
}
// Event handler for when the PDF is ready
static void OnPdfGenerated(object sender, PdfGeneratedEventArgs e)
{
Console.WriteLine($"PDF generated at: {e.FilePath}");
}
}
}Imports System
Imports System.ComponentModel
Imports IronPdf
Namespace IronPdfEventHandlerExample
' 1. Define custom EventArgs to carry event data
Public Class PdfGeneratedEventArgs
Inherits EventArgs
Public Property FilePath As String
End Class
' 2. Main class with event, BackgroundWorker, and logic
Public Class PdfGenerator
' Declare the public event using EventHandler(Of T)
Public Event PdfGenerated As EventHandler(Of PdfGeneratedEventArgs)
Private ReadOnly _worker As BackgroundWorker
Public Sub New()
_worker = New BackgroundWorker()
AddHandler _worker.DoWork, AddressOf OnDoWork
AddHandler _worker.RunWorkerCompleted, AddressOf OnRunWorkerCompleted
End Sub
' Start the async operation
Public Sub GenerateAsync(html As String, outputPath As String)
_worker.RunWorkerAsync(Tuple.Create(html, outputPath))
End Sub
' Perform PDF generation in background
Private Sub OnDoWork(sender As Object, e As DoWorkEventArgs)
Dim args = DirectCast(e.Argument, Tuple(Of String, String))
Dim html = args.Item1
Dim path = args.Item2
Dim renderer = New HtmlToPdf()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs(path)
e.Result = path
End Sub
' Notify subscribers when the PDF is ready
Private Sub OnRunWorkerCompleted(sender As Object, e As RunWorkerCompletedEventArgs)
Dim path = TryCast(e.Result, String)
RaiseEvent PdfGenerated(Me, New PdfGeneratedEventArgs With {.FilePath = path})
End Sub
End Class
' 3. Program to wire it all together
Module Program
Sub Main(args As String())
Dim generator = New PdfGenerator()
' Subscribe to the PdfGenerated event
AddHandler generator.PdfGenerated, AddressOf OnPdfGenerated
Console.WriteLine("Generating PDF asynchronously...")
generator.GenerateAsync("<h1>Hello, IronPDF!</h1>", "output.pdf")
Console.WriteLine("Press any key to exit after generation.")
Console.ReadKey()
End Sub
' Event handler for when the PDF is ready
Private Sub OnPdfGenerated(sender As Object, e As PdfGeneratedEventArgs)
Console.WriteLine($"PDF generated at: {e.FilePath}")
End Sub
End Module
End NamespaceKonsol Çıkışı

PDF Çıktısı

Bu Koddaki Ana Özellikler
public event EventHandler<PdfGeneratedEventArgs>: Güçlü tipte bir olayı bildirirPdfGeneratedEventArgs: Olay verisi için özel sınıfBackgroundWorker: UI tıkanıklığını önlemek için async yürütmeye izin verir?.Invoke(...): Güvenli olay çağrısıTuple<string, string>: Arka plan iş parçacığına HTML ve çıktı yolunu iletir
.NET'te Olaylarla Çalışmak İçin İpuçları
1. UI Is Parcacığını Engellemeyin
Arka plan görevlerinin tamamlanmasının ardından yalnızca RunWorkerCompleted gibi olay işleyicilerini kullanarak UI güncellemeleri yapın.
2. İstisna Durumlarını Zarifçe Ele Alın
İş mantığınızı DoWork içine try-catch bloklarına sarın ve RunWorkerCompleted'e e.Error aracılığıyla istisnalar iletin.
if (e.Error != null)
{
MessageBox.Show("Error: " + e.Error.Message);
}If e.Error IsNot Nothing Then
MessageBox.Show("Error: " & e.Error.Message)
End If3. Gerekli Olduğunda Abonelikten Çıkın
Uzun süren uygulamalarda, bellek sızıntılarını önlemek için artık ihtiyaç duymadığınız olaylardan abonelikten çıkın:
pdfWorker.DoWork -= PdfWorker_DoWork;pdfWorker.DoWork -= PdfWorker_DoWorkSon Düşünceler
Olay işleyicilerini, delege türlerini ve olay alanlarını IronPDF ile kullanmak, .NET uygulamalarına duyarlı, modern bir estetik katıyor. İster belgeleri bir temel sınıf içinde oluşturun, ister türetilmiş sınıflarda yeniden kullanılabilir mantıklar oluşturun ya da .NET'in olay modelini keşfedin, bu desen ölçeklenebilir ve temizdir.
Bu Yöntemi Ne Zaman Kullanmalı
- Bir görevin tamamlanmasını olay yükselterek işaretlemek istiyorsanız
- Mantık ve UI arasında temiz bir ayrım ihtiyacınız varsa
BackgroundWorker, olaylar ve delege ile çalışıyorsunuz- C#'ın tür güvenli işlem noktası mekaniklerini tercih ediyorsanız
Kefşetmek için Alternatifler
- Yeni iş akışları için
async/awaitveTask.Run - Uzun işlemler sırasında gerçek zamanlı güncellemeler için
IProgress<t>, IronPDF, C# olaylarıyla birleştirildiğinde güçlü ve duyarlı PDF oluşturan uygulamaları, gerçek dünya kullanımı düşünülerek basit hale getirir. .NET uygulamanızda olay odaklı PDF oluşturmayı uygulamaya hazır mısınız? Kullanıcılarınızı sorunsuz, kesintisiz deneyimlerle mutlu etmek için bir IronPDF ücretsiz denemesi ile deneyin!

Jacob Mellor, Iron Software'de Baş Teknoloji Yöneticisidir ve C# PDF teknolojisinde öncü bir mühendisdir. Iron Software'ın ana kod tabanının ilk geliştiricisi olarak, CEO Cameron Rimington ile birlikte şirketin ürün mimarisini 50'den fazla kişilik bir şirkete dönüştürmüştür ve NASA, Tesla ve dünya genelindeki devlet kurumlarına hizmet etmektedir.
İlgili Makaleler


