如何在C#中使用不同的线程连续填充两个DataGridView?

如何在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

我创建了两个DataGridView和一个start按钮,如图所示

当我按下开始按钮时,使用委托MyDel创建了两个线程t1和t2

实际上,我希望dataGridView1和dataGridView2都能连续填充。但只有dataGridView2在不断更新。完成dataGridView2后,dataGridView1开始更新

有谁能给我建议如何解决这个问题吗

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?我已经发布了我的全部代码;它是专门设计用来做你正在尝试的事情的。