c# BackgroundWorker初试

/*
* 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 = ; i <= ; i++)
{
(sender as BackgroundWorker).ReportProgress(i);
label1.Text = i.ToString();
Thread.Sleep();
}
} void UpdateButtonText(object sender, ProgressChangedEventArgs e)
{ button2.Text = e.ProgressPercentage.ToString(); } }
}

走过的弯路:

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

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

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

上一篇:JavaScipt中的Math.ceil() 、Math.floor() 、Math.round()、Math.pow() 三个函数的理解


下一篇:toLocaleString()使用