การใข้งาน Progress bar ด้วย Background Worker ใน Vb.Net
โปรแกรมเมอร์หลายๆคนอาจเคยพบปัญหา เวลาที่เราดึงข้อมูลจำนวนมากมาแสดง หรือ ประมวลผลหน้าจอโปรแกรมจะ ค้าง หรือ Not Respond ไประยะหนึ่งจนมันประมวลผลเรียบร้อย ทำให้ User ไม่เข้าใจว่าโปรแกรมเรา Hang หรือทำงานอยู่และไม่จบด้วยการไป End Task มัน
พระเอกของงานนี้คือ BackgroundWorker นั่นเอง
Event ของ BackgroundWorker มีดังนี้
- DoWork 'สั่งให้ทำงาน
- ProgressChanged 'เมื่อมีการเปลี่ยนแปลง
- RunWorkerCompleted 'เมื่อทำงานเสร็จ
1. เปิดโปรเจคขึ้นมาแล้วสร้างฟอร์มลักษณะดังภาพ อันประกอบไปด้วย
- Progressbar
- Backgroundworker
- Label
- Button
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
For i = 0 To 100 Step +1
'ถ้ามีการสั่ง Cancel ให้หยุดทันที
If BackgroundWorker1.CancellationPending = True Then
e.Cancel = True
Exit For
Else
'รายงานว่ามี prgress เพิ่ม 1 progress
BackgroundWorker1.ReportProgress(i)
System.Threading.Thread.Sleep(100)
End If
Next
End Sub
3. ใน event ProgressChanged ให้เราใส่ code ดังนี้
Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
'เพิ่ม 1 progress
Me.ProgressBar1.Value = e.ProgressPercentage
LabelControl1.Text = e.ProgressPercentag
End Sub
4. ใน event RunWorkerCompleted ให้เราใส่ code ดังนี้ Private Sub BackgroundWorker1_RunWorkerCompleted(sender As Object, e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
MsgBox("Complete")
Me.Dispose()
End Sub
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
BackgroundWorker1.WorkerReportsProgress = True
ProgressBar1.Maximum = 100
End Sub
เมื่อเราเตรียม BackgroundWorker Event เรียบร้อยมาถึงการสั่งทำงาน
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'สั่งให้ BackgroundWorker ทำงาน
BackgroundWorker1.RunWorkerAsync()
End Sub
การหยุดการทำงานของ BackgroundWorker
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If BackgroundWorker1.WorkerSupportsCancellation = True Then
'สั่งให้ BackgroundWorker หยุดทำงาน
BackgroundWorker1.CancelAsync() End if
End Sub
No comments:
Post a Comment