你好开发者,再次出现新问题!!
在我的线程程序中,当我更改控件值时,我遇到了问题。
问题是:跨线程操作无效。
是的..我得到了具有以下功能的解决方案,让我允许在线程中访问控制。
delegate void SetControlValueCallback(Control oControl, string propName, object propValue);
private void SetControlPropertyValue(Control oControl, string propName, object propValue)
{
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.ToUpper() == propName.ToUpper())
{
p.SetValue(oControl, propValue, null);
}
}
}
}
当我需要更改控件的值(喜欢更改标签的文字)时,我使用该功能
SetControlPropertyValue(_form.lblImportFiles,“Text”,“Importing ...”); 就像这样改变它的值。
现在..我想更改网格单元格的值或需要使用其Rows属性..等等..
我怎样才能做到这一点?我完全失明了。把我从这个问题中解脱出来。
答案 0 :(得分:1)
如果你想在Datagridview中设置值,那么试试这个,
private void ChangeGridUploadStatus(DataGridView dgv)
{
if (!dgv.InvokeRequired)
{
dgv["ColumnName", index].Value = "ok";
}
else
{
dgv.Invoke(new ChangeGridUploadStatusHandler(ChangeGridUploadStatus), dgv);
}
}
delegate void ChangeGridUploadStatusHandler(DataGridView dgv);