我是C#的初学者,
开始一个新的线程
pollprintthread = new System.Threading.Thread(PollPrint);
pollprintthread.Start();
在此线程中我使用Datagridview调用函数
void PollPrint()
{
(some code)
printausfueren();
(some code)
}
public void printausfueren()
{
(some Code)
object[] row = { sqlReader[0], sqlReader[1], sqlReader[3], sqlReader[2], sqlReader[4], sqlReader[5], sqlReader[6], sqlReader[7] };
dataGridViewPrint.Rows.Add(row);
(some Code)
}
但是我不能使用printausfuheren()。invoke,我找到了任何教程但只有静态方法
请帮助:)
答案 0 :(得分:2)
您可以在此处找到一个很好的解释:https://stackoverflow.com/a/12179408/67038
但是,我建议您在方法中包含对dataGridViewPrint.Rows.Add的调用,并调用该方法。
您需要执行此操作,因为在添加这些行时,您可能希望在UI上执行其他操作。
例如,如果要添加大量行,则需要在网格上调用BeginEdit / EndEdit,以便它不会尝试为您添加的每一行重绘自身:
public void printausfueren()
{
//(some Code)
object[] rows = { sqlReader[0], sqlReader[1], sqlReader[3], sqlReader[2], sqlReader[4], sqlReader[5], sqlReader[6], sqlReader[7] };
dataGridViewPrint.Invoke(new Action(() => LoadGrid(rows)));
//(some Code)
}
private void LoadGrid(object[] rows)
{
// only need BeginEdit/EndEdit if you are adding many rows at a time
dataGridViewPrint.BeginEdit(false);
dataGridViewPrint.Rows.Add(rows);
dataGridViewPrint.EndEdit();
}
答案 1 :(得分:0)
您可以轻松使用匿名方法执行复杂的调用,例如:
yourForm.Invoke( (MethodInvoker) delegate() { dataGridViewPrint.Rows.Add(row); } );
这将自动神奇地捕获row
实例等。