2011-11-05 30 views
1

你好开发者,再次出现这里有新问题!!
在我的线程程序中,当我改变控件的值时,我遇到了问题。

问题是:跨线程操作无效。
是的..我得到了解决方案的下面的功能,让我可以访问控制线程。十字绣操作无效 - 更改网格单元格值

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, “文本”, “导入...”);这样并且它改变了它的值。
Now..I要更改网格单元的值或需要其行property..etc玩..

我怎么能这样做?我完全失明了。让我摆脱这个问题。

回答

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);