顺便说一句,如果仅仅为了测试ReportProgress如何工作,你可以给backgroundWorker1_DoWork方法加上下面的代码:
dataGridViewCities.DataSource = e.Result;
FormBGW.cs的全部代码如下:
using System; using System.Collections.Generic;
--------------
译者的话,这是我在译言翻译的第一篇。从我的角度讲,我是不赞同一个看不懂这篇文章原文的人做程序员的。不过我天生不爱放弃,既然接下了翻译任务,就完成了它吧。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace TestBGW
{
public partial class FormBGW : Form
{
DateTime startDate = DateTime.Now;
public FormBGW()
{
InitializeComponent();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
toolStripStatusLabel1.Text = "Loading ... " + "Thanks for your patience";
e.Result = this.ComputeFibonacci(40);
toolStripStatusLabel1.Text = "Please, wait ...";
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
}
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
toolStripProgressBar1.Value = 100;
toolStripStatusLabel1.Text = "";
toolStripProgressBar1.Value = 0;
timer1.Stop();
toolStripStatusLabelTime.Text = "";
}
private void timer1_Tick(object sender, EventArgs e)
{
TimeSpan ts = DateTime.Now.Subtract(startDate);
string sTime = " ..." + ts.Minutes.ToString("00") +
":" + ts.Seconds.ToString("00") +
":" + ts.Milliseconds.ToString("000");
toolStripStatusLabelTime.Text = sTime;
if (toolStripProgressBar1.Value == toolStripProgressBar1.Maximum)
{
toolStripProgressBar1.Value = 0;
}
toolStripProgressBar1.PerformStep();
}
private void FormBGW_Activated(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();//开始异步操作
timer1.Start();
}
private long ComputeFibonacci(int n)
{
// The parameter n must be >= 0 and <= 91.
// Fib(n), with n > 91, overflows a long.
if ((n < 0) || (n > 91))
{
throw new ArgumentException(
"value must be >= 0 and <= 91", "n");
}
long result = 0;
if (n < 2)
{
result = 1;
}
else
{
result = ComputeFibonacci(n - 1) +
ComputeFibonacci(n - 2);
}
return result;
}
}
}