我不知道我会有多少背景工作者。 因此,在form1的顶部,我添加了BackGroundWorker的数组变量而没有make实例。
private BackgroundWorker[] threadArray;
现在我有另一个背景工作者,我在按钮点击事件中开始,然后在它的dowork中我只是调用一次方法
private void _FileInformationWorker_DoWork(object sender, DoWorkEventArgs e)
{
GetDirectories(BasePath);
}
然后在progresschanged事件中我有一个foreach。
我希望每次foreach循环结束时,为循环mydirs后将新背景工作者分配给MySubDirectories(DirectoryInfo [])并将其转换为Array。 然后每次使用MysubDirectories启动新的backgroundworker,或者为每个backgroundworker创建一个新的DirectoryInfo []变量。
可能有很多背景工作者。但我不知道有多少。
相反,就像我现在正在做的那样
if (_FileProcessingWorker.IsBusy == false)
每次foreach循环结束后创建一个新的backgroundworker。
List<DirectoryInfo> mydirs;
private void _FileInformationWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
label2.Text = e.ProgressPercentage.ToString();
string[] test = (string[])e.UserState;
if (test.Length > 0)
{
mydirs = new List<DirectoryInfo>();
foreach (string di in test)
{
DirectoryInfo mydir = new DirectoryInfo(di);
mydirs.Add(mydir);
}
if (_FileProcessingWorker.IsBusy == false)
{
MySubDirectories = mydirs.ToArray();
int SubDirectoryCount = MySubDirectories.GetLength(0);
MyProgressBar.Minimum = 0;
MyProgressBar.Step = 1;
MyProgressBar.Maximum = SubDirectoryCount;
MyProgressBar.Value = MyProgressBar.Minimum;
_LastCounter = 0;
_FileProcessingWorker.RunWorkerAsync(MySubDirectories);
}
}
}