¿El informe de BackgroundWorker progresa desde una clase externa?
Tengo una solución de trabajo que reporta el progreso y el texto a una barra de progreso y una etiqueta en el formulario principal de las aplicaciones. Ahora he trasladado mis métodos de trabajo a una clase para que sean accesibles a través de múltiples formularios, etc.
Dentro de los métodos de trabajo se encuentranBW.ReportProgress()
declaraciones que hacen retroceder el progreso y el texto al BackgroundWorker en el formulario principal.
Para dar una mejor idea aquí es el diseño del archivo:
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();
}
Luego mi nueva clase creada que abarca todos los métodos de trabajo y es para impulsar el progreso al formulario principal.
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);
}
}
}
El problema que tengo es que en elXMLandRar
La clase CreateRarBW no se reconoce (obviamente). ¿Cómo puedo hacer unaReportProgress
¿Llamar a la BW en la pantalla principal de la aplicación?