Control BackgroundWorker mengerjakan code dibelakang layar, tanpa menghipnotis form yang mengeksekusi perintah. Sering digunakan untuk proses import/export data atau eksekusi code lain yang membutuhkan waktu lama. Setelah beres eksekusi code, BackgroundWorker akan mengembalikan hasil nya ke form.
BackgroundWorker ada di Toolbox-> All Windows Form, mirip pada gambar berikut:
Untuk lebih terang perihal penggunaan control ini, mari kita buat aplikasi dengan loop (putaran) yang mengkonsumsi waktu cukup usang sebagai berikut:
UI:
BackgroundWorker tidak akan ditampilkan di form melaikan di bab bawah (area abu-bubuk). Tambahkan sebuah textbox untuk menampilkan "putaran ke-", button 1 untuk memulai putaran, dan button 2 untuk cancel proses. Kita juga menambahkan progress bar.
Code:
Keterangan isyarat pada comment berwarna hijau.
Imports System.ComponentModel
Public Class Form1
Dim iMax As Integer = 200 'iterasi maksimal
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
'untuk menangkal error ketika background proses mengganti UI
Control.CheckForIllegalCrossThreadCalls = False
With BackgroundWorker1
.WorkerReportsProgress = True 'catat nilai progress
.WorkerSupportsCancellation = True 'biar mampu cancel
End With
'setting nilai maksimum progress bar
ProgressBar1.Maximum = iMax
'UI Teks untuk button
Button1.Text = "Start"
Button2.Text = "Cancel"
End Sub
Private Sub Button1_Click(sender As Object, e As EventArgs) _
Handles Button1.Click
'Menjalankan proses background
BackgroundWorker1.RunWorkerAsync()
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) _
Handles Button2.Click
'Membatalkan proses background
BackgroundWorker1.CancelAsync()
BackgroundWorker1.Dispose()
End Sub
Private Sub BackgroundWorker1_DoWork(sender As Object, _
e As System.ComponentModel.DoWorkEventArgs) _
Handles BackgroundWorker1.DoWork
'mulai iterasi
For i = 0 To iMax
'handle jikalau ada cancel
If BackgroundWorker1.CancellationPending = True Then
e.Cancel = True
Exit For
Else
'proses normal tanpa cancel
TextBox1.Text = i 'memperlihatkan iterasi ke pada textbox
'mengantarprogress iterasi
BackgroundWorker1.ReportProgress(i)
'agar proses berhenti sejenak 1000 milidetik = 1 detik
System.Threading.Thread.Sleep(1000)
End If
Next
End Sub
Private Sub BackgroundWorker1_ProgressChanged(sender As Object, _
e As ProgressChangedEventArgs) _
Handles BackgroundWorker1.ProgressChanged
ProgressBar1.Value = e.ProgressPercentage
End Sub
Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, _
e As RunWorkerCompletedEventArgs) _
Handles BackgroundWorker1.RunWorkerCompleted
If e.Cancelled = True Then
MsgBox("Proses Dibatalkan")
Else
MsgBox("Proses Selesai")
End If
End Sub
End Class
Runtime:
Jalankan acara dan klik tombol Start.
Jika ketika proses berjalan kita klik tombol cancel maka proses akan berhenti dan muncul pesan berikut:
Sementara jikalau kita biarkan sampai proses akhir, akan timbul pesan berikut.
Click here if you like this article.
Sumber http://rani-irsan.blogspot.com
EmoticonEmoticon