Senin, 24 Agustus 2020

Vb.Net: Backgroundworker Control


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

:)
:(
hihi
:-)
:D
=D
:-d
;(
;-(
@-)
:o
:>)
(o)
:p
:-?
(p)
:-s
8-)
:-t
:-b
b-(
(y)
x-)
(h)