Assalamualaikum agan semua, jika sebelumnya saya memposting tentang Menggunakan Application Configuration File (App.Config). Pada malam hari ini saya akan memposting tentang Menggunakan Backgroundworker di C# dan VB.NET.

Apa itu Backgroundworker ?
Backgroundworker adalah component yang dapat menjalankan atau mengeksekusi kode pada background atau secondray thread, atau bisa dibilang dengan backgroundworker kita bisa menjalan atau mengeksekusi kode tanpa mengganggu proses pada program utama,

Pernahkah anda membuat aplikasi dimana pada aplikasi tersebut terdapat proses yang memakan waktu yang cukup lama? jika proses tersebut terlalu lama seringkali form tersebut berada pada keadaan 'Not Responding'. 
Mungkin bagi kita sebagai orang yang membuat aplikasi tersebut kita mengerti bahwa aplikasi sedang menyelesaikan proses yang cukup lama sehingga menyebabkan Not Responding, 
namun tidak bagi orang penggna yang mungkin beranggapan bahwa aplikasi yang kita buat itu mengalami crash atau error. Dengan backgroundworker ini lah kita dapat menjadikan penanganan proses yang rumit dan membutuhkan waktu yang lama terpisah dengan UI.

Baiklah langsung saja Langkah - langkah Menggunakan Backgroundworker di C# dan VB.NET

1. Buat project pada visual studio (disini saya menggunakan visual studio 2013)

2. Tambahkan 2 Button, 2 Label, 1 Progressbar dan 1 Backgroundworker

3. Lalu desain form seperti gambar dibawah ini


4. Pada event Form_Load tambahkan script dibawah ini
C#
' setting property backgroundworker
        backgroundWorker1.WorkerSupportsCancellation = True 'agar backgroundworker bisa di cancel
        backgroundWorker1.WorkerReportsProgress = True 'agar backgroundworker dapat memperbarui report progress
VB.NET
// setting property backgroundworker
            backgroundWorker1.WorkerSupportsCancellation = true; // agar backgroundworker bisa di cancel
            backgroundWorker1.WorkerReportsProgress = true; // agar backgroundworker dapat memperbarui report progress

5. Pada Event button_start_Click tambahkan script dibawah ini
C#
// jika backgroundworker tidak sedang berjalan/busy
            if (!backgroundWorker1.IsBusy)
            {
                // menjalankan backgroundworker
                backgroundWorker1.RunWorkerAsync();
            }
VB.NET
' jika backgroundworker tidak sedang berjalan/busy
        If (backgroundWorker1.IsBusy = False) Then
            ' menjalankan backgroundworker
            backgroundWorker1.RunWorkerAsync()
        End If

6. Pada Event button_cancel_Click tambahkan script dibawah ini
C#
// jika backgroundworker sedang berjalan
            if (backgroundWorker1.IsBusy)
            {
                // membatalkan proses backgroundworker
                backgroundWorker1.CancelAsync();
            }
VB.NET
'jika backgroundworker sedang berjalan
        If (backgroundWorker1.IsBusy) Then
            'membatalkan proses backgroundworker
            backgroundWorker1.CancelAsync()
        End If

7. Pada Event Backgroundworker1_DoWork tambahkan script dibawah ini
C#
// perulangan untuk mengisi value pada progressbar
            for (int i = 0; i <= 100;i++)
            {

                string status = "";
                if (i >= 1 && i < 30)
                {
                    status = "Inisialisasi";
                }
                else if (i >= 30 && i < 70)
                {
                    status = "Pengecekan file configurasi";
                }
                else if (i >= 70 && i < 100)
                {
                    status = "Pengecekan Database";
                }
                else if (i == 100)
                {
                    status = "Selesai";
                }

                // memperbarui reportprogress
                backgroundWorker1.ReportProgress(i, status);

                System.Threading.Thread.Sleep(100);

                // jika backgroundWorker1 di batalkan
                if (backgroundWorker1.CancellationPending)
                {
                    e.Cancel = true;
                    return;
                }
            }
VB.NET
 ' perulangan untuk mengisi value pada progressbar
        For i As Integer = 0 To 100

            Dim status As String = ""
            If (i >= 1 And i < 30) Then
                status = "Inisialisasi"
            ElseIf (i >= 30 And i < 70) Then
                status = "Pengecekan file configurasi"

            ElseIf (i >= 70 And i < 100) Then
                status = "Pengecekan Database"
            ElseIf (i = 100) Then
                status = "Selesai"
            End If

            ' memperbarui reportprogress
            backgroundWorker1.ReportProgress(i, status)

            System.Threading.Thread.Sleep(100)

            ' jika backgroundWorker1 di batalkan
            If (backgroundWorker1.CancellationPending) Then
                e.Cancel = True
                Exit Sub
            End If
        Next

8. Pada Event Backgroundworker1_Progresschanged tambahkan script dibawah ini
C#
        progressBar1.Value = Convert.ToDouble(e.ProgressPercentage) 'memperbarui value pada progressbar
        label1.Text = e.ProgressPercentage.ToString() & "%" ' memperbarui text pada label1
        label2.Text = DirectCast(e.UserState, String) ' memberparui text pada label2
VB.NET
        progressBar1.Value = Convert.ToDouble(e.ProgressPercentage) 'memperbarui value pada progressbar
        label1.Text = e.ProgressPercentage.ToString() & "%" ' memperbarui text pada label1
        label2.Text = DirectCast(e.UserState, String) ' memberparui text pada label2

9. Pada Event Backgroundworker1_RunworkerCompleted tambahkan script dibawah ini
C#
            if (e.Cancelled == true) // jika backgroundWorker1 dibatalkan
            {
                MessageBox.Show("Proses dibatalkan");
            }
            else if (e.Error != null) // jika terjadi error selama backgroundworker berjalan
            {
                MessageBox.Show(e.Error.Message);
            }
            else
            {
                MessageBox.Show("Proses selesai");
            }
VB.NET
If (e.Cancelled = True) Then 'jika backgroundWorker1 dibatalkan
            MessageBox.Show("Proses dibatalkan")
        ElseIf (e.Error IsNot Nothing) Then ' jika terjadi error selama backgroundworker berjalan
            MessageBox.Show(e.Error.Message)
        Else
            MessageBox.Show("Proses selesai")
        End If

10. Jalankan program yang telah kita buat dengan menekan F5, maka akan seperti gambar dibawah ini

Menggunakan Backgroundworker di C# dan VB.NET

Menggunakan Backgroundworker di C# dan VB.NET
Proses berjalan pada Thread yang berbeda dari UI Sehingga tidak menyebabkan terjadinya Not Responding dan Form menjadi Responsif


Menggunakan Backgroundworker di C# dan VB.NET
Membatalkan proses yang sedang berjalan pada backgroundworker
Kita bisa melihat perbedaan yang cukup terlihat ketika kita menggunakan backgroundworker atau tidak, jika kita menggunakan backgroundworker proses perulangan untuk menambahkan value pada progressbar berada pada Thread yang berbeda dari UI dengan begitu ketika proses tersebut memakan waktu yang cukup lama form tersebut akan tetap responsif dan tidak menyebabkan 'Not Responding' 

Anda dapat mendownload source codenya dibawah ini 
| VB.NET | C# |
Untuk password silahkan klik disini 


Sekian pembahasan tentang Menggunakan Backgroundworker di C# dan VB.NET
Tunggu tutorial menarik lainnya, karena itu kunjungi terus blog ini
Author image

About the Author :

Nama Saya Dwi Randy Herdinanto. Saya Tinggal Di Bandar Lampung, Saat Ini SayaKuliah di Salah Satu Perguruan Tinggi di Lampung dan Juga Bekerja di Software House Lampung

Connect with me on :

1 Comments
Comments
 
Top