我是C#newbie,并且有一个类需要将行信息传递给windows窗体中的网格。最好的方法是什么?我已经提供了一些示例代码以便更好地理解。
public class GUIController
{
private My_Main myWindow;
public GUIController( My_Main window )
{
myWindow = window;
}
public void UpdateProducts( List<myProduct> newList )
{
object[] row = new object[3];
foreach (myProduct product in newList)
{
row[0] = product.Name;
row[1] = product.Status;
row[2] = product.Day;
//HOW DO I USE BeginInvoke HERE?
}
}
}
下面的表单类:
public class My_Main : Form
{
//HOW DO I GO ABOUT USING THIS DELEGATE?
public delegate void ProductDelegate( string[] row );
public static My_Main theWindow = null;
static void Main( )
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
theWindow = new My_Main();
Application.Run(theWindow);
}
private void My_Main_Load( object sender, EventArgs e )
{
/// Create GUIController and pass the window object
gui = new GUIController( this );
}
public void PopulateGrid( string[] row )
{
ProductsGrid.Rows.Add(row);
ProductsGrid.Update();
}
}
答案 0 :(得分:1)
像这样:
myWindow.BeginInvoke(new My_Main.ProductDelegate(myWindow.PopulateGrid), new object[] { row });
但是,如果您的代码在后台线程上运行,则只应使用Invoke
/ BeginInvoke
。
如果您的UpdateProducts
方法在UI线程上运行,则不需要BeginInvoke
;你可以简单地调用方法,如下所示:
myWindow.PopulateGrid(row);
如果你打电话给BeginInvoke
,你需要通过在循环内移动row
的声明来在每次迭代中创建一个单独的数组实例。