Hướng dẫn php background worker - công nhân nền php

Sử dụng Background Worker trong lập trình Windows Form với C#

BackgroundWorker là một component (nằm trong namespace System.ComponentModel) giúp cho việc lập trình Thread trở nên dễ dàng do các thuộc tính và event mà nó hỗ trợ sẵn. Lớp này được .NET cung cấp với mục đích quản lý các tiến trình chạy nền, ít hao tốn tài nguyên nhất.

Bài viết này sẽ giới thiệu cách sử dụng BackgroundWoker để làm một ví dụ tính tổng 2 số sử dụng progress bar theo kiểu gọi bất đồng bộ.

Lớp BackgroundWorker có những thuộc tính quan trọng sau :BackgroundWorker có những thuộc tính quan trọng sau :

  1. WorkerReportsProgress: cho phép tiến trình báo cáo tiến độ của công việc (nếu là true): cho phép tiến trình báo cáo tiến độ của công việc (nếu là true)
  2. WorkerSupportsCancellation: cho phép dừng tiến trình trong khi đang thực thi (nếu là true): cho phép dừng tiến trình trong khi đang thực thi (nếu là true)
  3. CancellationPending: cờ báo dừng tiến trình (= true nghĩa là có lệnh dừng tiến trình): cờ báo dừng tiến trình (= true nghĩa là có lệnh dừng tiến trình)

Lớp BackgroundWorker được quản lý thông qua 3 sự kiện chính: BackgroundWorker được quản lý thông qua 3 sự kiện chính:
  1. DoWork: đoạn mã thực hiện công việc sẽ được đặt ở đây. Sự kiện này xảy ra khi bắt đầu tiến trình. đoạn mã thực hiện công việc sẽ được đặt ở đây. Sự kiện này xảy ra khi bắt đầu tiến trình.
  2. ProgressChanged: xảy ra khi tiến độ của tiến trình có sự thay đổi hoặc khi ta gọi hàm ReportProgress() của lớp BackgroundWorker.: xảy ra khi tiến độ của tiến trình có sự thay đổi hoặc khi ta gọi hàm ReportProgress() của lớp BackgroundWorker.
  3. RunWorkerCompleted: xảy ra khi tiến trình hoàn tất hoặc bị hủy bỏ.: xảy ra khi tiến trình hoàn tất hoặc bị hủy bỏ.

Để sử dụng BackgroundWorker trong Windows Form, bạn có thể kéo component vào từ Toolbox trong thẻ Components và sử dụng như các control thông thường.


Ví dụ: Tính tổng của 2 số, dùng lớp BackgroundWorker để quản lý việc chạy một vòng lặp và hiển thị tiến độ lên thanh ProgressBar..

Screen shot

1. Thiết kế Form

Hướng dẫn php background worker - công nhân nền php

2. Demo

Hướng dẫn php background worker - công nhân nền php

C# source code:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace BgWorker_demo
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
         }

        public void display(string thongbao)
        {
            MessageBox.Show(thongbao);
        }
      
        private void bgWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            for (int i = 1; i <= 100; i++)
            {
                if (bgWorker1.CancellationPending)
                {
                    e.Cancel = true;
                }
                else
                {
                    async();
                    bgWorker1.ReportProgress(i);
                }
                
            }

        }

        private void button1_Click(object sender, EventArgs e)
        {
            bgWorker1.RunWorkerAsync();
        }

        private void btnCancel_Click(object sender, EventArgs e)
        {
            bgWorker1.CancelAsync();
        }

        private void bgWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            
            progressBar1.Value = e.ProgressPercentage;
            lbl1.Text = e.ProgressPercentage.ToString() + " % completed";
        }

        private void bgWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Cancelled)
            {
                display("The program is stopped");
            }
            else
            {
                try
                {
                    double a = Convert.ToDouble(textBox1.Text);
                    double b = Convert.ToDouble(textBox2.Text);
                    double c = a + b;
                    textBox3.Text = Convert.ToString(c);
                    display("Already completed");
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
        public void async()
        {
            Thread.Sleep(100);
        }
    }
}

[Nghean-Aptech]

Các tin mới hơn:

Hướng dẫn php background worker - công nhân nền php
Hướng dẫn tích hợp giao diện trang quản trị SB Admin 2 vào Laravel 5.8.

Hướng dẫn php background worker - công nhân nền php
Hướng dẫn tích hợp Google ReCaptcha v2 vào Laravel bằng curl.

Hướng dẫn php background worker - công nhân nền php
Học lập trình React JS trong vòng 5 phút.

Hướng dẫn php background worker - công nhân nền php
Sử dụng trình soạn thảo CKeditor tích hợp CKFinder với Laravel.

Hướng dẫn php background worker - công nhân nền php
Hướng dẫn cài đặt Apache, PHP, MySQL, PHPMyAdmin trên Windows 10 và cấu hình SendMail.

Các tin cũ hơn:

Hướng dẫn php background worker - công nhân nền php
Học Java thì để làm gì.

Hướng dẫn php background worker - công nhân nền php
Cách tối ưu WordPress hay nhất.

Hướng dẫn php background worker - công nhân nền php
Lập trình viên 2014: Những kỹ năng cần có.

Hướng dẫn php background worker - công nhân nền php
RWD đơn giản với CSS và DIV.

Hướng dẫn php background worker - công nhân nền php
Dữ liệu Lớn (Big Data) là gì.