我是C#的新手,并且要求DataViewGrid具有固定行和三列。每列的数据来自不同的源,并且三个线程同时运行以接收它。现在,是否可以更新这些列,即 第一列第一列 第二列由第二个线程组成 第三列由第三个线程组成 不使用任何同步对象? 如果这不可能,那么我将创建三个DataViewGrid,它将由各个线程更新。
答案 0 :(得分:0)
您使用的是Windows窗体还是WPF? 通常,您可以使用称为Bindings的东西。在WinForms中,UI控件上通常有一个属性“ DataContext ”。您可以从其他线程更新该属性。然后,您可以控制哪个列与您为DataContext提供的List或数组的哪个属性匹配。 在WPF中有可观察的集合。您还将控件映射到Property,然后从其中一个线程更新该属性。
很难给你更多的建议,因为我缺乏关于你正在使用哪种技术以及哪种架构(MVC,MVVM,......)的信息。 如果您需要更多帮助,请更新您的问题并向我们提供更多信息。
答案 1 :(得分:0)
适合我,但我不喜欢它。
private void button1_Click(object sender, EventArgs e)
{
for(int i = 0; i < 10; i++)
{
DataGridViewRow newRow = new DataGridViewRow();
this.dataGridView1.Rows.Add(newRow);
}
FillThread[] t = new FillThread[3];
for (int i = 0; i < 3; i++)
{
t[i] = new FillThread(this.dataGridView1, i);
}
}
class FillThread
{
struct param_t
{
public DataGridView TheGrid;
public int Type;
}
private Thread _worker;
public FillThread(DataGridView theGrid, int type)
{
_worker = new Thread(ThreadProc);
param_t param = new param_t();
param.TheGrid = theGrid;
param.Type = type;
_worker.Start(param);
}
public void ThreadProc(object data)
{
param_t param = (param_t)data;
for(int i = 0; i < 10; i++)
{
param.TheGrid.Rows[i].Cells[param.Type].Value = i;
}
}
}