gpt4 book ai didi

c# - 使用 BeginInvoke 将数据传递到 Winforms UI

转载 作者:太空宇宙 更新时间:2023-11-03 14:30:34 28 4
gpt4 key购买 nike

我是 C# 新手,有一个类需要将行信息传递到 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();

}
}

最佳答案

像这样:

myWindow.BeginInvoke(new My_Main.ProductDelegate(myWindow.PopulateGrid), new object[] { row });

但是,如果您的代码在后台线程上运行,您应该只使用 Invoke/BeginInvoke

如果您的 UpdateProducts 方法在 UI 线程上运行,则不需要 BeginInvoke;您可以像这样简单地调用该方法:

myWindow.PopulateGrid(row);

如果您确实调用了 BeginInvoke,您需要通过将 row 的声明移动到循环中来在每次迭代中创建一个单独的数组实例.

关于c# - 使用 BeginInvoke 将数据传递到 Winforms UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2733895/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com