C# BackgroundWorker (Geliştiriciler iç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:
Install-Package IronPdf
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 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 Sub
Bu, ç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 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 Sub
Not: 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);
}
}
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 Sub
Adı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 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 Sub
Tam 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();
}
}
}
}
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 Namespace
Form çı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.
Sıkça Sorulan Sorular
UI'yi dondurmadan bir C# Windows Forms uygulamasında PDF oluşturmayı nasıl gerçekleştirebilirim?
IronPDF ile PDF oluşturmayı ayrı bir iş parçacığında gerçekleştirmek için C# BackgroundWorker sınıfını kullanabilirsiniz. Bu, ana UI iş parçacığının işlem sırasında duyarlı kalmasını sağlar.
BackgroundWorker'deki DoWork olay işleyicisinin rolü nedir?
DoWork olay işleyicisi, IronPDF kullanarak PDF oluşturma gibi uzun süreli görevi yürüttüğünüz yerdir. UI'dan ayrı bir iş parçacığında çalışır, arayüzün donmasını engeller.
Arka plan PDF oluşturma görevinin sonuçlarıyla UI'yi nasıl güncelleyebilirim?
PDF oluşturma sonuçlarınızla UI'yi güncellemek için RunWorkerCompleted olayını kullanın. Bu olay, arka plan görevi tamamlandığında tetiklenir ve UI öğeleriyle güvenli bir şekilde etkileşimde bulunmanıza olanak tanır.
Eski .NET uygulamalarında PDF işleme için BackgroundWorker kullanmanın avantajları nelerdir?
BackgroundWorker, eski WinForms uygulamalarında eşzamansız işlemleri uygulamak için basit bir yol sunar ve IronPDF ile PDF işleme gibi görevleri yönetmek için basit bir model sağlar, UI'yı duyarlı tutar.
BackgroundWorker kullanarak bir PDF oluşturma görevini iptal edebilir miyim?
Evet, BackgroundWorker görevlerin iptalini destekler. İptali DoWork olay işleyicinizde CancellationPending özelliğini kontrol ederek ve görevi nazikçe sonlandırarak uygulayabilirsiniz.
BackgroundWorker kullanarak PDF oluşturmanın ilerlemesini nasıl takip edebilirim?
DoWork metodundan ReportProgress metodunu kullanarak ilerlemeyi bildirebilirsiniz. Bu, PDF oluşturma sırasında UI'yi ilerleme bilgileriyle güncellemenizi sağlar.
DoWork olay işleyicisinde UI güncellemelerinden neden kaçınılmalıdır?
UI güncellemelerinden DoWork olay işleyicisinde kaçınılmalıdır çünkü o ayrı bir iş parçacığında çalışır. Doğrudan UI manipülasyonu, iş parçacığı sorunlarına yol açabilir. Bunun yerine, UI güncellemeleri için RunWorkerCompleted veya ProgressChanged olaylarını kullanın.
C#'ta PDF oluşturma için bir BackgroundWorker kurulumunda hangi adımlar yer alır?
Bir BackgroundWorker kurmak, çalışanı başlatmayı, DoWork ve RunWorkerCompleted olaylarını işleten işlemi ve RunWorkerAsync kullanarak görevi başlatmayı içerir. Bu kurulum, IronPDF ile PDF oluşturma gibi görevleri gerçekleştirmek için kullanılır.
.NET uygulamalarında PDF oluşturma için modern async/await modellerini kullanmak gerekli mi?
Modern async/await modelleri yeni uygulamalar için önerilirken, BackgroundWorker, IronPDF ile PDF oluşturma gibi eşzamansız görevleri yönetmek için eski WinForms uygulamalarında hala kullanışlıdır, basitliği ve kullanım kolaylığı nedeniyle.




