
C# BackgroundWorker (Geliştiriciler İçin Nasıl Çalışır)
IronPDF ile PDF oluşturma, dinamik raporlar, faturalar veya belge otomasyon sistemleri oluştururken, .NET geliştiricileri için sıkça karşılaşılan bir görevdir. Ama bir Windows Forms veya WPF uygulamasında, ana UI iş parçacığında PDF oluşturmayı başlattıysanız, kullanıcı arayüzünüzün donduğunu veya yanıt vermediğini görmüşsünüzdür. Bu, özellikle büyük HTML içeriklerini render etmek veya karmaşık PDF düzenleri işlemek için geçerlidir.
Bu gibi durumlarda C# BackgroundWorker sınıfı devreye girer. Bu makale, masaüstü uygulamalarda kullanıcı arayüzünü kilitlemeden asenkron işlemleri gerçekleştirmek için BackgroundWorker ile IronPDF'ü nasıl entegre edeceğinizi ele alıyor.
Neden IronPDF ile BackgroundWorker Kullanılmalı?
Arayüzünüzü Duyarlı Tutun
Ana iş parçacığında PDF oluşturma gibi CPU yoğun veya IO bağımlı görevler çalıştırdığınızda, bu arayüzü kitler. Kullanıcılar uygulama meşgulken tıklayamaz, sürükleyemez veya etkileşimde bulunamaz. BackgroundWorker nesnesi kullanarak işi ayrı bir iş parçacığına taşıyarak, arayüzünüzü arka plan işlemleri sırasında hızlı ve kullanılabilir tutabilirsiniz.
Rapor Oluşturma ve Uzun Süren Görevler İçin Mükemmel
Uygulamanız veri ihracı, HTML'yi PDF'e dönüştürme veya detaylı raporları oluşturmayı içeriyorsa, bunu arka plan çalışanına aktarmak uygulamanızı daha profesyonel ve performanslı hale getirir.
Eski WinForms Uygulamalarıyla Uyumludur
Modern uygulamalar genellikle async/await kullanırken, birçok eski proje, sadeliği ve Visual Studio'da tasarım zamanı desteği nedeniyle hala BackgroundWorker'den faydalanır.
IronPDF Nedir?

IronPDF, C#'ta PDF belgeleri oluşturmak, düzenlemek ve çalışmak için tasarlanmış güçlü bir .NET kütüphanesidir. Altında başsız bir Chromium tarayıcı kullanarak, geliştiricilere HTML, CSS, JavaScript ve hatta karmaşık web sayfalarını doğru, baskı kalitesinde PDF'lere dönüştürme imkanı tanır. Geleneksel PDF oluşturucuların aksine, IronPDF belgeleri tarayıcıda görünecekleri şekilde – piksel-piksel düzen, yazı tipleri, resimler ve stillere uygun olarak işlenir.
Ana Özellikler
- HTML'den PDF'e Dönüştürme – HTML dizgileri, URL'ler veya tam web sayfalarını PDF'lere aktarın.
- Resim ve Metin İşleme – Başlık, altbilgi, filigran ve resimleri programatik olarak ekleyin.
- PDF'leri Birleştirme ve Bölme – Birden çok belgeyi birleştirin veya belirli sayfalar çıkarın.
- Form Doldurma ve Notlandırma – Etkileşimli PDF formları ile çalışın.
- Dış Bağımlılıklar Yok – Adobe Acrobat veya Microsoft Office'in kurulu olmasına gerek yoktur.
IronPDF, .NET Framework, .NET Core ve .NET 6/7+'ı destekler ve hem masaüstü hem de web tabanlı .NET uygulamaları için idealdir.
NuGet ile IronPDF Kurulumu
Başlamak için, IronPDF'i projeye NuGet Paket Yöneticisi kullanarak yükleyin:
Bu, Projenize IronPDF'in ChromePdfRenderer, HtmlToPdf ve diğer güçlü özelliklerini kullanmanıza olanak sağlayacak gerekli tüm referansları ekleyecektir.
Bu örnekte, PDF oluşturmaya tetikleyen bir düğme ve işlemin tamamlandığını gösteren bir etiketle birlikte Visual Studio ile oluşturulmuş bir Windows Forms uygulaması kullanacağız.
IronPDF için BackgroundWorker Uygulama
Şimdi, BackgroundWorker'ı yapılandırılmış ve güvenli bir şekilde kullanma sürecini parçalamak için aşağıdaki kod örneklerini kullanacağız:
Adım 1 – BackgroundWorker'ı Tanımlayın
BackgroundWorker'ı ister tasarımcıda isterseniz kodda oluşturabilir ve yapılandırabilirsiniz. İşte kod yaklaşımı:
private void SetupBackgroundWorker()
{
// new backgroundworker worker instance
worker = new BackgroundWorker(); // dowork event handler
worker.DoWork += PdfWorker_DoWork;
worker.RunWorkerCompleted += PdfWorker_RunWorkerCompleted; // final result handler
}Private Sub SetupBackgroundWorker()
' new backgroundworker worker instance
worker = New BackgroundWorker() ' dowork event handler
worker.DoWork += PdfWorker_DoWork
worker.RunWorkerCompleted += PdfWorker_RunWorkerCompleted ' final result handler
End SubBu, çalışanı başlatır ve arka plan yürütme ve tamamlanma için gerekli olayları bağlar.
Adım 2 – DoWork Olayını Ele Alın
DoWork yöntemi, arka plan operasyonunu (PDF oluşturma) gerçekleştiren farklı bir iş parçacığında çalışır:
private void PdfWorker_DoWork(object sender, DoWorkEventArgs e)
{
var Renderer = new ChromePdfRenderer();
// Simulate input from UI or parameters
string htmlContent = "<h1>Monthly Report</h1><p>Generated with IronPDF.</p>";
string outputPath = Path.Combine(Environment.CurrentDirectory, "Report.pdf");
// Generate PDF
var pdf = Renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs(outputPath);
// Optionally pass result info
e.Result = outputPath; // pass value to RunWorkerCompleted
}Private Sub PdfWorker_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs)
Dim Renderer = New ChromePdfRenderer()
' Simulate input from UI or parameters
Dim htmlContent As String = "<h1>Monthly Report</h1><p>Generated with IronPDF.</p>"
Dim outputPath As String = Path.Combine(Environment.CurrentDirectory, "Report.pdf")
' Generate PDF
Dim pdf = Renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs(outputPath)
' Optionally pass result info
e.Result = outputPath ' pass value to RunWorkerCompleted
End SubNot: Burada bir çalışan iş parçacığında çalıştığı için arayüz kontrolleri ile etkileşimde bulunamazsınız.
Adım 3 – Tamamlama Bildirimi İçin RunWorkerCompleted Kullanın
Arka plan iş parçacığı tamamlandığında, sonuçlarla birlikte arayüzü güvenli bir şekilde güncelleyebilirsiniz.
private void PdfWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Error != null)
{
MessageBox.Show("Error: " + e.Error.Message);
}
else
{
string savedPath = e.Result.ToString();
MessageBox.Show("PDF created at:\n" + savedPath);
}
}Imports Microsoft.VisualBasic
Private Sub PdfWorker_RunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs)
If e.Error IsNot Nothing Then
MessageBox.Show("Error: " & e.Error.Message)
Else
Dim savedPath As String = e.Result.ToString()
MessageBox.Show("PDF created at:" & vbLf & savedPath)
End If
End SubAdım 4 – UI'dan BackgroundWorker Tetikleyin
Tıklandığında arka plan görevinin yürütülmesi için bir Başlat düğmesi ekleyin:
private void btnGeneratePDF_Click(object sender, EventArgs e)
{
if (pdfWorker == null)
SetupBackgroundWorker();
if (!pdfWorker.IsBusy)
{
btnGeneratePDF.Enabled = false;
pdfWorker.RunWorkerAsync(); // execute method in background
}
}Private Sub btnGeneratePDF_Click(ByVal sender As Object, ByVal e As EventArgs)
If pdfWorker Is Nothing Then
SetupBackgroundWorker()
End If
If Not pdfWorker.IsBusy Then
btnGeneratePDF.Enabled = False
pdfWorker.RunWorkerAsync() ' execute method in background
End If
End SubTam Kod Örneği
İşte her şeyin tek bir çalışan Windows Forms kesitinde birleştirildiği yer:
using System;
using System.ComponentModel;
using IronPdf;
using System.IO;
using System.Windows.Forms;
namespace TestApp
{
public partial class Form1 : Form
{
private BackgroundWorker worker;
public Form1()
{
InitializeComponent();
SetupBackgroundWorker(); }
private void SetupBackgroundWorker()
{
worker = new BackgroundWorker();
worker.DoWork += PdfWorker_DoWork;
worker.RunWorkerCompleted += PdfWorker_RunWorkerCompleted;
}
private void btnGeneratePDF_Click(object sender, EventArgs e)
{
if (!worker.IsBusy)
{
btnGeneratePDF.Enabled = false;
worker.RunWorkerAsync();
}
}
private void PdfWorker_DoWork(object sender, DoWorkEventArgs e)
{
var Renderer = new ChromePdfRenderer();
string htmlContent = "<h1>Report</h1><p>This PDF was generated in the background.</p>";
string outputPath = Path.Combine(Environment.CurrentDirectory, "Report.pdf");
var pdf = Renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs(outputPath);
e.Result = outputPath;
}
private void PdfWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
btnGeneratePDF.Enabled = true;
if (e.Error != null)
{
MessageBox.Show("Failed: " + e.Error.Message);
}
else
{
MessageBox.Show("PDF created: " + e.Result.ToString());
}
}
private void btnGeneratePDF_Click_1(object sender, EventArgs e)
{
if (!worker.IsBusy)
{
btnGeneratePDF.Enabled = false;
worker.RunWorkerAsync();
}
}
}
}Imports System
Imports System.ComponentModel
Imports IronPdf
Imports System.IO
Imports System.Windows.Forms
Namespace TestApp
Partial Public Class Form1
Inherits Form
Private worker As BackgroundWorker
Public Sub New()
InitializeComponent()
SetupBackgroundWorker()
End Sub
Private Sub SetupBackgroundWorker()
worker = New BackgroundWorker()
AddHandler worker.DoWork, AddressOf PdfWorker_DoWork
AddHandler worker.RunWorkerCompleted, AddressOf PdfWorker_RunWorkerCompleted
End Sub
Private Sub btnGeneratePDF_Click(ByVal sender As Object, ByVal e As EventArgs)
If Not worker.IsBusy Then
btnGeneratePDF.Enabled = False
worker.RunWorkerAsync()
End If
End Sub
Private Sub PdfWorker_DoWork(ByVal sender As Object, ByVal e As DoWorkEventArgs)
Dim Renderer = New ChromePdfRenderer()
Dim htmlContent As String = "<h1>Report</h1><p>This PDF was generated in the background.</p>"
Dim outputPath As String = Path.Combine(Environment.CurrentDirectory, "Report.pdf")
Dim pdf = Renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs(outputPath)
e.Result = outputPath
End Sub
Private Sub PdfWorker_RunWorkerCompleted(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs)
btnGeneratePDF.Enabled = True
If e.Error IsNot Nothing Then
MessageBox.Show("Failed: " & e.Error.Message)
Else
MessageBox.Show("PDF created: " & e.Result.ToString())
End If
End Sub
Private Sub btnGeneratePDF_Click_1(ByVal sender As Object, ByVal e As EventArgs)
If Not worker.IsBusy Then
btnGeneratePDF.Enabled = False
worker.RunWorkerAsync()
End If
End Sub
End Class
End NamespaceForm çıkışı

PDF Çıktısı

En İyi Uygulamalar
UI Erişimini DoWork De Önleyin
DoWork olay işleyici farklı bir iş parçacığında çalışır, bu nedenle arayüz elemanlarına doğrudan erişemezsiniz. Güvenli UI güncellemeleri için RunWorkerCompleted veya kontrol Invoke() çağrılarını kullanın.
Eşzamanlı İptal Desteğini Etkinleştirin
Göreviniz uzun ise, WorkerSupportsCancellation = true yapın ve talep edilen iptali desteklemek için CancellationPending'i DoWork içinde izleyin.
Rapor İlerleme Güncellemeleri Kullanın (İsteğe Bağlı)
WorkerReportsProgress = true yapabilir ve ilerleme çubuğu veya mesajlar göstermek için ProgressChanged olayını kullanabilirsiniz.
Girdi Argümanını Doğrulayın
RunWorkerAsync(argument) kullanırken, argümanı DoWork içinde doğrulayın ve e.Result üzerinden herhangi bir yöntem sonucunu döndürün.
Sonuç
IronPDF ile BackgroundWorker kullanarak, ağır PDF işleme görevlerini arka planda çalıştırabilir, uygulamanızı duyarlı tutabilirsiniz. Bu, PDF oluşturma gibi uzun süren görevler sırasında duyarlı UI güncellemeleri gerektiren WinForms veya WPF uygulamaları ile çalışırken özellikle değerlidir.
dowork olay işleyicisini ele alarak, son sonucu izleyerek ve kullanıcı arayüzünüzü güvenli bir şekilde runworkercompleted olayında güncelleyerek, arka plan işlemlerinizin sorunsuz çalışmasını sağlarsınız.
Yeni uygulamalar için async/await genellikle tercih edilse de, BackgroundWorker eski veya WinForms projeleri için güvenilir bir araç olmaya devam ediyor. İster raporları dışa aktarın ister belgeleri anında oluşturun, bu yaklaşım IronPDF'ten en iyi şekilde faydalanmanıza yardımcı olacak ve uygulamanızı pürüzsüz ve kullanıcı dostu tutacaktır.
Kendi Denemeye Hazır mı?
Ücretsiz IronPDF deneme lisansını indirerek bugün C#'te güçlü PDF çözümleri oluşturmaya başlayın. Deneme sürümü, bu makalede gösterilen özelliklere tam erişim sağlar—kredi kartı gerekmez.

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


