Mi sono imbattuto in un problema simile in un applicativo che ho sviluppato e ho risolto in questo modo:
codice:
delegate void SetControlValueCallback(Control oControl, string propName, object propValue);
private void SetControlPropertyValue(Control oControl, string propName, object propValue)
{
try
{
if (oControl.InvokeRequired)
{
SetControlValueCallback d = new SetControlValueCallback(SetControlPropertyValue);
oControl.Invoke(d, new object[] { oControl, propName, propValue });
}
else
{
Type t = oControl.GetType();
System.Reflection.PropertyInfo[] props = t.GetProperties();
foreach(System.Reflection.PropertyInfo p in props)
{
if(p.Name.ToLower() == propName.ToLower())
{
p.SetValue(oControl,propValue,null);
}
}
}
}
catch(Exception e)
{
//Gestione errori
}
}
Nel thread che gestisce la progress bar:
codice:
SetControlPropertyValue(prbAvanzamento,"Value", index);
dove prbAvanzamento è il controllo che vuoi modificare,
value è la proprietà da modificare,
index è il valore da attribuire alla progress
Ovviamente il codice funziona su qualsiasi controllo