
Sử dụng Background worker để chạy nền trong C#

Background worker là một thành phần trong winform, nó giúp cho việc lập trình Thread trở nên đơn giản hơn nhờ vào các sự kiện có sẵn của nó. Trong bài viết này, mình sẽ chia sẻ với bạn cách sử dụng Background worker để chạy nền một cái gì đó trong lập trình C# với winform.
Khai báo và tạo thủ tục cho Background worker
Từ hộp Toolbox, tìm đến BackgroundWorker và kéo thả nó vào form.
- Import thư viện ComponentModel với cú pháp:
using System.ComponentModel;
- Thêm đoạn code sau:
int a = 0;
private void dosomething()
{
for(int i=0; i<=100; i++)
{
a += 1;
Thread.Sleep(500);
backgroundWorker1.ReportProgress(i);
}
}
Hàm dosomething()
là hàm sẽ làm một trong việc gì đó. Trong hàm này mình sử dụng Thread.Sleep
để giả lập tiến trình xử lý lâu để mình có thể thấy rõ hơn kết quả làm việc của BackgroundWorker. ReportProgress(i) sẽ trả về tiến trình thực thi.
Sử dụng các event của Background worker
Vào Properties của BackgroundWorker đã kéo thả, chuyển qua phần events và kích đôi hết tất cả các event để tạo hàm cho event đó.
Bâu giờ chúng ta sẽ viết lần lượt các hàm.
Sự kiện DoWork của Background Worker
Hàm này sẽ thực thi một công việc nào đó, nó là phần quan trọng, trong ví dụ này mình sẽ gọi hàm dosomething()
vào.
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
dosomething();
}
Sự kiện ProgressChanged của Background Worker
Đây là sự kiện báo cáo tiến trình thay đổi. Trong ví dụ này mình sẽ sử dụng một ProgressBar
và cho thực hiện thay đổi giá trị của nó trong sự kiện này.
- Kéo thả một progressBar và để tên mặc định là
progressBar1
- Trong sự kiện
ProgressChanged
thêm đoạn code như sau:
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
Application.DoEvents();
textBox1.Text = a + " %";
}
Sự kiện RunWorkerCompleted của Background Worker
Sự kiện này xảy ra khi tiến trình kết thúc. Trong ví dụ này, mình sẽ cho nó hiện một messagebox
.như sau:
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("Hoàn thành tiến trình","tiến trình kết thức", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
Như vậy là đã xong, bây giờ mình sẽ kéo thêm vào một nút bấm và sẽ gọi hàm backgroundWorker1.RunWorkerAsync()
; khi click.
Kết quả:

Đang chạy

Hoàn tất
