c# BackgroundWorker初试_.NET_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > .NET > c# BackgroundWorker初试

c# BackgroundWorker初试

 2017/9/6 16:08:52  jjw  程序员俱乐部  我要评论(0)
  • 摘要:/**CreatedbySharpDevelop.*User:Administrator*Date:2017/7/31*Time:16:18**TochangethistemplateuseTools|Options|Coding|EditStandardHeaders.*/usingSystem;usingSystem.Collections.Generic;usingSystem.Drawing;usingSystem.Windows.Forms;usingSystem.Threading
  • 标签:C#

 

/*
 * Created by SharpDevelop.
 * User: Administrator
 * Date: 2017/7/31
 * Time: 16:18
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
using System.Threading;
using System.ComponentModel;

namespace App
{
    /// <summary>
    /// Description of MainForm.
    /// </summary>
    public partial class MainForm : Form
    {
        private BackgroundWorker bw;
        public MainForm()
        {
            //
            // The InitializeComponent() call is required for Windows Forms designer support.
            //
            InitializeComponent();

            //
            // TODO: Add constructor code after the InitializeComponent() call.
            //
        }
        void process1_Exited(object sender, EventArgs e)
        {
            // TODO: Implement process1_Exited
        }

        private void MainForm_Load(object sender, EventArgs e)
        {

        }
        void button1_Click(object sender, EventArgs e)
        {
            bw = new BackgroundWorker();
            bw.WorkerReportsProgress = true;
            bw.WorkerSupportsCancellation = true;

            bw.DoWork += DoWork;
            bw.RunWorkerCompleted += RunWorkerComplated;
            bw.ProgressChanged += UpdateButtonText;
            bw.RunWorkerAsync();
        }

        void RunWorkerComplated(object sender, RunWorkerCompletedEventArgs e)
        {
            MessageBox.Show("ok");
        }

        void DoWork(object sender, DoWorkEventArgs e)
        {
            for (int i = 1; i <= 100; i++)
            {
                (sender as BackgroundWorker).ReportProgress(i);
                label1.Text = i.ToString();
                Thread.Sleep(100);
            }
        }

        void UpdateButtonText(object sender, ProgressChangedEventArgs e)
        {

            button2.Text = e.ProgressPercentage.ToString();

        }

    }
}

走过的弯路:

1. DoWork方法中不能操纵UI控件。

2. DoWork事件中调用ReportProgress方法,在ProgressChanged事件中可以操纵UI控件。

3. WorkerReportsProgress属性必须设置true.   (默认是false. 因为这块,费了不少时间找原因)

 

发表评论
用户名: 匿名