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.ComponentModelLalu 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
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
Public Class Form1Nah...Kalo masih belum berasa bedanya....mungkin proses yang dijalankan pembaca kurang berat dan kurang lama #eh :D
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
0 comments:
Post a Comment