У меня есть рабочее решение, которое сообщает о ходе выполнения и тексте на индикаторе выполнения и метке на главной форме приложения. Теперь я переместил свои рабочие методы в класс, чтобы они были доступны в нескольких формах и т. д.
В рабочих методах есть операторы 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);
}
}
}
Проблема, с которой я сталкиваюсь, заключается в том, что в классе XMLandRar
CreateRarBW не распознается (очевидно) — как я могу сделать ReportProgress
вызов BW на главном экране приложения?