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(); 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; } } //Populates 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++; } } //Populates 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++; } } //Starts the 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(); } } }
Invoke
BeginInvoke
System.Windows.Threading.Dispatcher
System.Windows.Forms.Control
var
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)