2011-11-05 34 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);