3 回答

TA貢獻1876條經(jīng)驗 獲得超5個贊
您需要在ProgressChanged事件上注冊一個處理程序,并調(diào)用ReportProgress(percentage)該DoWork方法。
例子:
class Program
{
private static BackgroundWorker _worker;
static void Main(string[] args)
{
_worker = new BackgroundWorker();
_worker.DoWork += Worker_DoWork;
_worker.ProgressChanged += Worker_ProgressChanged;
_worker.WorkerReportsProgress = true;
_worker.RunWorkerAsync();
Console.ReadLine();
}
private static void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
Console.WriteLine("Progress is {0}", e.ProgressPercentage);
}
private static void Worker_DoWork(object sender, DoWorkEventArgs e)
{
var worker = (BackgroundWorker)sender;
for (int i = 0; i < 100; ++i)
{
worker.ReportProgress(i); // Reporting progress in percent
Thread.Sleep(50);
}
}
}

TA貢獻1900條經(jīng)驗 獲得超5個贊
將
Maximum
ProgressBar的屬性設(shè)置為您的文件數(shù)。這樣您就不必自己計算百分比。在復(fù)制文件的循環(huán)中,只需增加
Value
ProgressBar的屬性即可。在UI線程中復(fù)制文件并在后臺線程中更新ProgressBar是沒有意義的,如果真的花費太長時間,則應(yīng)該相反。

TA貢獻1784條經(jīng)驗 獲得超9個贊
我自己想通了:對于每個擁有數(shù)組并希望使用進度條和后臺工作人員的人(可能有更好的方法):
private void Button (object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
var files = Directory.GetFiles(startPath, "*" + filetype, SearchOption.AllDirectories);
int max = files.Length;
int i = 0;
foreach (var file in files)
{
File.Copy(file, tempPath + @"\" + System.IO.Path.GetFileName(file));
backgroundWorker1.ReportProgress((i * 100) / max);
i++;
}
}
- 3 回答
- 0 關(guān)注
- 185 瀏覽
添加回答
舉報