พฤษภาคม 20, 2019, 04:38:16 am *
ยินดีต้อนรับคุณ, บุคคลทั่วไป กรุณา เข้าสู่ระบบ หรือ ลงทะเบียน
ส่งอีเมล์ยืนยันการใช้งาน?

เข้าสู่ระบบด้วยชื่อผู้ใช้ รหัสผ่าน และระยะเวลาในเซสชั่น
   หน้าแรก   ช่วยเหลือ เข้าสู่ระบบ สมัครสมาชิก  
หน้า: [1]   ลงล่าง
  พิมพ์  
ผู้เขียน หัวข้อ: BackgroundWorker (Code Example)  (อ่าน 1494 ครั้ง)
0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้
ShadowMan
Administrator
Hero Member
*****
ออฟไลน์ ออฟไลน์

เพศ: ชาย
กระทู้: 8272


ShadowWares


| |
« เมื่อ: พฤศจิกายน 25, 2015, 05:42:55 pm »

BackgroundWorker



Code: (c-sharp)
        public static BackgroundWorker bg;
        public Form1()
        {
            InitializeComponent();

            progressBar1.Value = 0;
            button1.Enabled = true;
            button2.Enabled = false;
            label1.Text = "Ready!";
            Text = "Asynchonous Operation";

            bg = new BackgroundWorker();
            bg.WorkerSupportsCancellation = true;
            bg.WorkerReportsProgress = true;

            bg.DoWork += doWork;
            bg.ProgressChanged += progressChange;
            bg.RunWorkerCompleted += runWorkerCompleted;
        }


Code: (c-sharp)
        // Start button
        private void button1_Click(object sender, EventArgs e)
        {
            if (bg.IsBusy != true)
            {
                bg.RunWorkerAsync();
            }

            button1.Enabled = false;
            button2.Enabled = true;
        }


Code: (c-sharp)
        // Stop/Cancel button
        private void button2_Click(object sender, EventArgs e)
        {
            if (bg.WorkerSupportsCancellation == true)
            {
                bg.CancelAsync();

                button1.Enabled = true;
                button2.Enabled = false;
            }
        }



Code: (c-sharp)
        private void runWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            //throw new NotImplementedException();
            if (e.Cancelled)
            {
                label1.Text = "Processing cancelled";
            }
            else if(e.Error != null)
            {
                label1.Text = e.Error.Message;
            }
            else
            {
                label1.Text = "Returned result = " + e.Result;
                MessageBox.Show("Operation completed", "Info", MessageBoxButtons.OK,
                            MessageBoxIcon.Information);
            }

            progressBar1.Value = 0;
            button1.Enabled = true;
            button2.Enabled = false;
        }


Code: (c-sharp)
        private void progressChange(object sender, ProgressChangedEventArgs e)
        {
            //throw new NotImplementedException();
            progressBar1.Value = e.ProgressPercentage;
            label1.Text = "Processing... " + e.ProgressPercentage + "%";
        }


Code: (c-sharp)
        private void doWork(object sender, DoWorkEventArgs e)
        {
            int sum = 0;

            for(int i=0; i<=1000; i++)
            {
                Thread.Sleep(3);
                bg.ReportProgress(i/10);
                sum += i;

                if(bg.CancellationPending)
                {
                    e.Cancel = true;
                    //bg.ReportProgress(0);
                    break; // return;
                }
            }

            e.Result = sum;
       }


บันทึกการเข้า

By SDW: Do No Wrong Is Do Nothing
          If you want to increase your success rate, double your failure rate
หน้า: [1]   ขึ้นบน
  พิมพ์  
 
กระโดดไป: