我如何创建多个后台工作者?

时间:2016-03-23 06:42:33

标签: c# .net winforms

我不知道我会有多少背景工作者。 因此,在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);
            }
        }
    }

0 个答案:

没有答案