BackgroundWorker сообщает о прогрессе из внешнего класса?

У меня есть рабочее решение, которое сообщает о ходе выполнения и тексте на индикаторе выполнения и метке на главной форме приложения. Теперь я переместил свои рабочие методы в класс, чтобы они были доступны в нескольких формах и т. д.

В рабочих методах есть операторы BW.ReportProgress(), которые возвращают ход выполнения и текст в BackgroundWorker в основная форма.

Чтобы дать лучшее представление, вот макет файла:

MainScreen.cs

List repSelected = new List();
XMLandRar xXMLandRar = new XMLandRar();

private void Rarbtn_Click(object sender, EventArgs e)
        {
            GetReps();

            //Run worker
            if (!CreateRarBW.IsBusy)
            {
                CreateRarBW.RunWorkerAsync();
            }
        }

//Worker
private void CreateRarBW_DoWork(object sender, DoWorkEventArgs e)
{
    xXMLandRar.RarFiles(repSelected);
}

//Progress reporting
private void CreateRarBW_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
    progBar.Value = e.ProgressPercentage;
    Statuslbl.Text = e.UserState.ToString();
}

Затем мой вновь созданный класс, который включает в себя все рабочие методы и должен передавать прогресс в главную форму.

XML и Rar.cs

public class XMLandRar
{
    public void RarFiles(List repSelected)
    {
        int step = 100 / repSelected.Count();
        int i = 0;
        //Iterate through list and run rar for each
        foreach (string rep in repSelected)
        {
            CreateRarBW.ReportProgress(i, "Raring files for " + rep);
            DirectoryExists(rep);
            ProcessRunner(rep);
            i += step;
            CreateRarBW.ReportProgress(i, "Raring files for " + rep);
        }
    }
}

Проблема, с которой я сталкиваюсь, заключается в том, что в классе XMLandRarCreateRarBW не распознается (очевидно) — как я могу сделать ReportProgressвызов BW на главном экране приложения?

5
задан Henk Holterman 22 May 2012 в 11:05
поделиться