Thursday, June 4, 2015

VB Net : Penggunaan Component BackgroundWorker

Kali ini penulis akan membahas sekilas tentang component BackgroundWorker yang ada di vb net, BackgroundWorker merupakan component yang memungkinkan kita untuk memproses / menjalankan code tanpa mengganggu proses utama. Code yang dijalankan melalui component ini bekerja di belakang layar.

Mungkin pembaca pernah dalam menjalankan aplikasi yang memakan waktu lama dalam menjalankan proses dari code yang kita buat hingga akhirnya aplikasi tampak hang / "Not Responding", padahal sebenarnya aplikasi masih menjalankan proses.

Nah, dengan BackgroundWorker kita bisa menjalankan proses secara bersamaan. Biasanya penulis menggunakannya untuk proses-proses yang akan memakan waktu lama dan untuk proses utamanya hanya untuk menjalankan ProgressBar sebagai penanda bahwa aplikasi masih tetap berjalan.

Langsung saja, contoh penggunaanya sebagai berikut :


1. Tambahkan 2 Label, 2 Button, 1 ProgressBar, 1 Timer dan 1 BackgroundWorker pada new Project
2. Lalu ketik/Copy Paste Source berikut
Imports System.ComponentModel
Public Class Form1
Private Sub Button1_Click(ByVal ByValsender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If BackgroundWorker1.IsBusy <> True Then
BackgroundWorker1.RunWorkerAsync()
Timer1.Enabled = True
Timer1.Start()
ProgressBar1.Visible = True
End If
End Sub

Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
Dim worker As BackgroundWorker = CType(sender, BackgroundWorker)
Application.DoEvents()
Try

Dim i As Integer = 0
Do Until i = 150
System.Threading.Thread.Sleep(100)
 i += 1
Label1.Text = "Proses Belakang " & i
Loop
Catch ex As Exception
MsgBox(Err.Description)
End Try
End Sub

Private Sub Form1_FormClosing(ByVal ByValsender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
BackgroundWorker1.Dispose()
End Sub

Private Sub Form1_Load(ByVal ByValsender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
System.Windows.Forms.Form.CheckForIllegalCrossThreadCalls = False
BackgroundWorker1.WorkerSupportsCancellation = True
BackgroundWorker1.WorkerReportsProgress = True
ProgressBar1.Visible = False
End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If ProgressBar1.Value < 100 Then
ProgressBar1.Value += 1
ElseIf ProgressBar1.Value = 100 Then
ProgressBar1.Value = 0
ProgressBar1.Value += 1
End If
If Label1.Text = "Proses Belakang 150" Then
Timer1.Stop()
ProgressBar1.Visible = False
End If
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim b As Integer = 0
Do Until b = 150
Application.DoEvents()
System.Threading.Thread.Sleep(100)
b += 1
Label2.Text = "Proses Depan " & b
Loop
End Sub
End Class
Lalu bandingkan dengan source tanpa backgroudWorker :

Public Class Form1
Private Sub Button1_Click(ByVal ByValsender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim b As Integer = 0
Do Until b = 150
Application.DoEvents()
System.Threading.Thread.Sleep(100)
b += 1
Label1.Text = "Proses Depan " & b
Loop
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim b As Integer = 0
Do Until b = 150
Application.DoEvents()
System.Threading.Thread.Sleep(100)
b += 1
Label2.Text = "Proses Depan " ; b
Loop
End Sub
End Class
Nah...Kalo masih belum berasa bedanya....mungkin proses yang dijalankan pembaca kurang berat dan kurang lama #eh :D

0 comments:

Post a Comment

Terima kasih sudah berkomentar

Coretan © 2008.
Hanya blog sederhana, sebagai bahan contekan dikala sedang belajar membuat project