BackgroundWorker raportuje postęp z klasy zewnętrznej?
Mam działające rozwiązanie, które raportuje postęp i tekst na pasku postępu oraz etykietę w głównym formularzu aplikacji. Przeniosłem teraz moje metody robocze do klasy, aby były dostępne w wielu formularzach itp.
W ramach metod pracy sąBW.ReportProgress()
instrukcje, które przesuwają postęp i tekst do BackgroundWorker w głównym formularzu.
Aby dać lepszy pomysł, tutaj znajduje się układ plików:
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();
}
Potem moja nowo utworzona klasa, która obejmuje wszystkie metody robotnicze i ma wypchnąć postęp do głównego formularza.
XMLandRar.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);
}
}
}
Problem, który mam, jest taki, że wXMLandRar
klasa CreateRarBW nie jest rozpoznawana (oczywiście) - jak mogę zrobićReportProgress
zadzwonić do BW na głównym ekranie aplikacji?