como quedo tu codigo al final, algo puede estar pasando.
no se desanime , por algo estan probados y mas como forma segura de implementar threading.
solo muestranos tu codigo y vemos que tiene al final.
estoy casi seguro que es por esto
Código:
private void EjecutaProcesos_DoWork(object sender, DoWorkEventArgs e)
{
int porcentaje; //Nunca lo inicializas
for (int i = 0; i < this.gvProcesos.DataRowCount; i++)
{
int vProceso = Convert.ToInt16(((DataTable)(((DataView)(((BaseView)(this.gvProcesos)).DataSource)).Table)).Rows[i]["idProceso"]);
switchProcesos(vProceso);
BarraProgreso("que le mando?", ((BackgroundWorker)(sender)).ReportProgress(porcentaje));
porcentaje++;
}
}