IRONSOFTWAREHOME
AKTUALNOŚCI DLA PROGRAMISTÓW

C# BackgroundWorker (Jak to działa dla deweloperów)

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Jacob Mellor
Updated: 21 kwietnia 2026

Generowanie plików PDF za pomocą IronPDF jest częstym zadaniem dla programistów .NET — zwłaszcza podczas tworzenia dynamicznych raportów, faktur lub systemów automatyzacji dokumentów. Jeśli jednak kiedykolwiek uruchomiłeś generowanie pliku PDF w głównym wątku interfejsu użytkownika w aplikacji Windows Forms lub WPF, prawdopodobnie zauważyłeś, że interfejs użytkownika zawiesił się lub przestał reagować. Dzieje się tak zwłaszcza podczas renderowania dużych treści HTML lub przetwarzania złożonych układów PDF.

W tym miejscu pojawia się klasa C# BackgroundWorker. W tym artykułe omówiono, jak zintegrować IronPDF z BackgroundWorker, aby obsługiwać operacje asynchroniczne w aplikacji desktopowej bez blokowania interfejsu użytkownika.

Dlaczego warto używać BackgroundWorker z IronPDF?

Zadbaj o responsywność interfejsu użytkownika

Gdy w głównym wątku uruchamiasz zadania obciążające procesor lub ograniczone przez operacje wejścia/wyjścia, takie jak generowanie plików PDF, interfejs użytkownika zawiesza się. Użytkownicy nie mogą klikać, przeciągać ani wchodzić w interakcję z aplikacją, gdy jest ona zajęta. Korzystając z obiektu BackgroundWorker, możesz przenieść pracę do oddzielnego wątku, dzięki czemu interfejs będzie działał płynnie i będzie dostępny podczas przetwarzania w tle.

Idealne do generowania raportów i zadań długotrwałych

Jeśli Twoja aplikacja wymaga eksportowania danych, konwersji HTML do PDF lub renderowania szczegółowych raportów — przeniesienie tych zadań do modułu działającego w tle sprawi, że Twoja aplikacja będzie bardziej profesjonalna i wydajna.

Kompatybilność ze starszymi aplikacjami WinForms

Chociaż nowoczesne aplikacje często wykorzystują async/await, wiele starszych projektów nadal korzysta z BackgroundWorker ze względu na jego prostotę i obsługę w czasie projektowania w Visual Studio.

Czym jest IronPDF?

C# BackgroundWorker (Jak działa dla deweloperów): Rysunek 1 - IronPDF

IronPDF to potężna biblioteka .NET przeznaczona do generowania, edycji i pracy z dokumentami PDF w języku C#. W tle wykorzystuje przeglądarkę Chromium bez interfejsu użytkownika, umożliwiając programistom konwersję HTML, CSS, JavaScript, a nawet złożonych stron internetowych na dokładne pliki PDF o jakości drukarskiej. W przeciwieństwie do tradycyjnych generatorów PDF, IronPDF renderuje dokumenty dokładnie tak, jak wyglądałyby w przeglądarce — zachowując układ, czcionki, obrazy i style piksel po pikselu.

Najważniejsze cechy

  • Konwersja HTML do PDF – renderowanie ciągów HTML, adresów URL lub całych stron internetowych do plików PDF.
  • Renderowanie obrazów i tekstu – programowe dodawanie nagłówków, stopek, znaków wodnych i obrazów.
  • Łączenie i dzielenie plików PDF – łącz wiele dokumentów lub wyodrębnij konkretne strony.
  • Wypełnianie formularzy i adnotacje – praca z interaktywnymi formularzami PDF.
  • Brak zewnętrznych zależności – działa bez konieczności instalowania programów Adobe Acrobat lub Microsoft Office.

IronPDF obsługuje platformy .NET Framework, .NET Core oraz .NET 6/7+, dzięki czemu idealnie nadaje się zarówno do aplikacji .NET na komputery stacjonarne, jak i aplikacji internetowych.

Instalacja IronPDF za pośrednictwem NuGet

Aby rozpocząć, zainstaluj IronPDF w swoim projekcie za pomocą menedżera pakietów NuGet:

PM > Install-Package IronPdf

Dzięki temu dodane zostaną wszystkie niezbędne odniesienia, dzięki czemu będziesz mógł zacząć korzystać z ChromePdfRenderer, HtmlToPdf i innych zaawansowanych funkcji IronPDF.

W tym przykładzie wykorzystamy aplikację Windows Forms utworzoną w programie Visual Studio, zawierającą przycisk uruchamiający generowanie pliku PDF oraz etykietę wskazującą moment zakończenia procesu.

Wdrażanie BackgroundWorker dla IronPDF

Teraz wykorzystamy poniższe przykłady kodu, aby w uporządkowany i bezpieczny sposób przeanalizować proces korzystania z BackgroundWorker:

Krok 1 – Zdefiniuj BackgroundWorker

Możesz utworzyć i skonfigurować obiekt BackgroundWorker w projektancie lub w kodzie. Oto podejście oparte na kodzie:

private void SetupBackgroundWorker()
{
    // new backgroundworker worker instance
    worker = new BackgroundWorker(); // dowork event handler
    worker.DoWork += PdfWorker_DoWork;
    worker.RunWorkerCompleted += PdfWorker_RunWorkerCompleted; // final result handler
}

Spowoduje to zainicjowanie procesu roboczego i skonfigurowanie niezbędnych zdarzeń do wykonania w tle oraz zakończenia.

Krok 2 – Obsługa zdarzenia DoWork

Metoda DoWork działa w innym wątku, wykonując operację w tle (generowanie pliku PDF):

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
}

Uwaga: Nie można tutaj korzystać z elementów interfejsu użytkownika, ponieważ działa on w wątku roboczym.

Krok 3 – Użyj RunWorkerCompleted do powiadomienia o zakończeniu

Po zakończeniu działania wątku w tle można bezpiecznie zaktualizować interfejs użytkownika o wyniki.

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);
    }
}

Krok 4 – Wywołanie BackgroundWorker z interfejsu użytkownika

Dodaj przycisk Start, aby po kliknięciu uruchomić zadanie w tle:

private void btnGeneratePDF_Click(object sender, EventArgs e)
{
    if (pdfWorker == null)
        SetupBackgroundWorker();
    if (!pdfWorker.IsBusy)
    {
        btnGeneratePDF.Enabled = false;
        pdfWorker.RunWorkerAsync(); // execute method in background
    }
}

Pełny przykład kodu

Oto wszystko połączone w jednym działającym fragmencie kodu Windows Forms:

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();
            }
        }
    }
}

Wynik formularza

C# BackgroundWorker (Jak działa dla deweloperów): Rysunek 2 - Wynik formularza po utworzeniu PDF

Wynik w formacie PDF

C# BackgroundWorker (Jak działa dla deweloperów): Rysunek 3 - Wynik PDF

Najlepsze praktyki

Unikaj dostępu do interfejsu użytkownika w DoWork

Procedura obsługi zdarzeń DoWork działa w innym wątku, więc nie można uzyskać bezpośredniego dostępu do elementów interfejsu użytkownika. Użyj RunWorkerCompleted lub kontroluj wywołania Invoke(), aby zapewnić bezpieczną aktualizację interfejsu użytkownika.

Obsługa asynchronicznego anulowania

Jeśli zadanie jest długie, włącz opcję WorkerSupportsCancellation = true i monitoruj CancellationPending wewnątrz DoWork, aby umożliwić anulowanie zadania na żądanie.

Korzystaj z aktualizacji postępów (opcjonalnie)

Można włączyć opcję WorkerReportsProgress = true i użyć zdarzenia ProgressChanged do wyświetlenia paska postępu lub komunikatów.

Sprawdź poprawność argumentu wejściowego

Podczas korzystania z RunWorkerAsync(argument) należy zweryfikować argument w DoWork i zwrócić wszelkie wyniki metody za pośrednictwem e.Result.

Wnioski

Korzystanie z BackgroundWorker w połączeniu z IronPDF pozwala na wykonywanie wymagających zadań związanych z renderowaniem plików PDF w wątku w tle, dzięki czemu aplikacja pozostaje responsywna. Jest to szczególnie cenne podczas pracy z aplikacjami WinForms lub WPF, które wymagają responsywnych aktualizacji interfejsu użytkownika podczas długotrwałych zadań, takich jak generowanie plików PDF.

Obsługując procedurę obsługi zdarzenia dowork, monitorując wynik końcowy i bezpiecznie aktualizując interfejs użytkownika w zdarzeniu runworkercompleted, zapewniasz płynne działanie operacji w tle.

Chociaż async/await jest często wybierane do nowych aplikacji, BackgroundWorker pozostaje niezawodnym narzędziem dla starszych projektów lub projektów WinForms. Niezależnie od tego, czy eksportujesz raporty, czy generujesz dokumenty w locie, to podejście pomoże Ci w pełni wykorzystać możliwości IronPDF, jednocześnie zapewniając płynne działanie aplikacji i jej przyjazność dla użytkownika.

Chcesz sam spróbować?

Pobierz bezpłatną wersję próbną IronPDF i już dziś zacznij tworzyć zaawansowane rozwiązania PDF w języku C#. Wersja próbna zapewnia pełny dostęp do funkcji przedstawionych w tym artykułe — nie jest wymagana karta kredytowa.

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

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.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta