如何在C#中使用不同的线程连续填充两个DataGridView?
我创建了两个DataGridView和一个start按钮,如图所示 当我按下开始按钮时,使用委托MyDel创建了两个线程t1和t2 实际上,我希望dataGridView1和dataGridView2都能连续填充。但只有dataGridView2在不断更新。完成dataGridView2后,dataGridView1开始更新 有谁能给我建议如何解决这个问题吗如何在C#中使用不同的线程连续填充两个DataGridView?,c#,multithreading,winforms,C#,Multithreading,Winforms,我创建了两个DataGridView和一个start按钮,如图所示 当我按下开始按钮时,使用委托MyDel创建了两个线程t1和t2 实际上,我希望dataGridView1和dataGridView2都能连续填充。但只有dataGridView2在不断更新。完成dataGridView2后,dataGridView1开始更新 有谁能给我建议如何解决这个问题吗 using System; using System.Windows.Forms; using System.Threading; na
using System;
using System.Windows.Forms;
using System.Threading;
namespace MultiThreadedDataGridViewDemo
{
public partial class Form1 : Form
{
private delegate void MyDel();
int count=0;
int count_1 = 0;
public Form1()
{
InitializeComponent();
//Cells are created in dataGridView1 and dataGridView2
for (int p = 0; p < 37; p++)
{
dataGridView1.Columns.Add("", "");// dynamic cloumn adding
dataGridView1.Rows.Add();//dynamic row adding
dataGridView1.Columns[p].SortMode = DataGridViewColumnSortMode.NotSortable;//Disables the column header sorting
dataGridView1.Columns[p].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
dataGridView1.Columns[p].Width = 70;
dataGridView2.Columns.Add("", "");// dynamic cloumn adding
dataGridView2.Rows.Add();//dynamic row adding
dataGridView2.Columns[p].SortMode = DataGridViewColumnSortMode.NotSortable;//Disables the column header sorting
dataGridView2.Columns[p].AutoSizeMode = DataGridViewAutoSizeColumnMode.None;
dataGridView2.Columns[p].Width = 70;
}
}
//Method to populate dataGridView1
public void Method1()
{
while (count < 10000)
{
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
for (int k = 0; k < dataGridView1.Columns.Count; k++)
{
dataGridView1.Rows[i].Cells[k].Value = count;
}
}
count++;
}
}
//Method to populate dataGridView2
public void Method2()
{
while (count_1 < 10000)
{
for (int i = 0; i < dataGridView2.Rows.Count; i++)
{
for (int k = 0; k < dataGridView2.Columns.Count; k++)
{
dataGridView2.Rows[i].Cells[k].Value = count_1;
}
}
count_1++;
}
}
//Creates threads to populate dataGridView1 and dataGridView1
private void btn_Start_Click(object sender, EventArgs e)
{
MyDel del_1 = new MyDel(Method1);
Thread t1 = new Thread(new ThreadStart(del_1));
t1.Start();
MyDel del_2 = new MyDel(Method2);
Thread t2 = new Thread(new ThreadStart(del_2));
t2.Start();
}
}
}
使用系统;
使用System.Windows.Forms;
使用系统线程;
命名空间多线程DataGridViewDemo
{
公共部分类Form1:Form
{
私有委托void MyDel();
整数计数=0;
int count_1=0;
公共表格1()
{
初始化组件();
//在dataGridView1和dataGridView2中创建单元格
对于(int p=0;p<37;p++)
{
dataGridView1.Columns.Add(“,”);//动态cloumn添加
dataGridView1.Rows.Add();//动态行添加
dataGridView1.Columns[p].SortMode=DataGridViewColumnSortMode.NotSortable;//禁用列标题排序
dataGridView1.Columns[p].AutoSizeMode=DataGridViewAutoSizeColumnMode.None;
dataGridView1.Columns[p].Width=70;
dataGridView2.Columns.Add(“,”);//动态cloumn添加
dataGridView2.Rows.Add();//动态行添加
dataGridView2.Columns[p].SortMode=DataGridViewColumnSortMode.NotSortable;//禁用列标题排序
dataGridView2.Columns[p].AutoSizeMode=DataGridViewAutoSizeColumnMode.None;
dataGridView2.Columns[p].Width=70;
}
}
//方法来填充dataGridView1
公共无效方法1()
{
而(计数<10000)
{
对于(int i=0;i
您应该使用BackgroundWorker
,并在其ProgressChanged
-事件中更新UI,该事件用于访问UI
-线程。使用ReportProgress
-方法,您可以将int percentProgress
和object userState
发送到链接的ProgressChanged
-方法。例如,使用userState
-对象,您可以传递一个充满DataGridViewRows
的列表,并将它们添加到ProgressChanged
-方法中,添加到您的DataGridView
我想知道您是如何没有得到“跨线程异常”的你得到它了吗?或者你设置了CheckForIllegalCrossThreadCalls=false
?如何使用C#中的不同线程连续填充两个DataGridView?我的回答:不,不要这样做,UI不应该用工作线程更新。@Sriram Sakthivel不,我没有设置CheckForIllegalCrossThreadCalls=false?我已经发布了我的全部代码;它是专门设计用来做你正在尝试的事情的。