使用BackgroundWorker
,把你的for循環DoWork
方法裏面:
backgroundWorker1.DoWork += doWork;
private void doWork(object sender, DoWorkEventArgs e)
{
for (int l = 0; l < newfile.Length; l++)
{
vfswriter.Write(newfile[l]);
double percentage = ((double)l/(double)newfile.Length * 100);
this.progressBar1.Value = int.Parse(Math.Truncate(percentage).ToString());
}
}
當您要執行你的循環調用backgroundWorker1.RunWorkerAsync()
方法。
您也可以使用ProgressChanged
事件來更新你的進度條:
backgroundWorker1.DoWork += doWork;
backgroundWorker1.ProgressChanged += progressChanged;
private void doWork(object sender, DoWorkEventArgs e)
{
for (int l = 0; l < newfile.Length; l++)
{
vfswriter.Write(newfile[l]);
double percentage = ((double)l/(double)newfile.Length * 100);
var value = int.Parse(Math.Truncate(percentage).ToString());
backgroundWorker1.ReportProgress(value);
}
}
private void progressChanged(object sender, ProgressChangedEventArgs e)
{
this.progressBar1.Value = e.ProgressPercentage;
}
更新:如果你想傳遞參數給DoWork
方法,你可以做到這一點,當你調用backgroundWorker1.RunWorkerAsync()
方法是這樣的:
backgroundWorker1.RunWorkerAsync(argument);
您可以通過e.Argument
在DoWork
方法中訪問它。如果你想傳遞多個參數,你可以用Anonymous Types
做的伎倆。例如:
var myArguments = new { Property1 = "some value", Property2 = myId, Property3 = myList };
backgroundWorker1.RunWorkerAsync(myArguments);
在DoWork的方法:
dynamic arguments = e.Argument;
var arg1 = arguments.Property1;
var arg2 = arguments.Property2;
// and so on...
我沒有看到企圖利用一個BackgroundWorker。這可能有幫助。 –
我試過了,但是我的代碼是這樣的:我調用一個方法,並在它使用文本和背景工作的方法中 – Meydan
正如一個方面說明 - 你可能會失去'百分比'變量,並將進度條更新編碼爲'this。 progressBar1.Value = l * 100/newfile.Length;'。整數數學可以做你想做的事情。 – Enigmativity