using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace winform
{
public partial class Form1 : Form
{
DataTable table;
public Form1()
{
InitializeComponent();
}
private async void button1_Click(object sender, EventArgs e)
{
await Task.Run(() => {
FillData();
dataGridView1.InvokeIfRequired(s => {
s.ColumnCount = 3;
s.Columns[0].Name = "Column1";
s.Columns[1].Name = "Column2";
s.Columns[2].Name = "Column3";
s.Columns[0].Width = 100;
s.Columns[1].Width = 100;
s.Columns[2].Width = 300;
s.RowHeadersVisible = false;
});
foreach (DataRow row in table.Rows)
{
dataGridView1.InvokeIfRequired(s => {
int n = s.Rows.Add();
s.Rows[n].Cells[0].Value = row["Column1"].ToString();
s.Rows[n].Cells[1].Value = row["Column2"].ToString();
s.Rows[n].Cells[2].Value = row["Column3"].ToString();
});
}
});
}
private void FillData()
{
table = new DataTable();
table.Columns.Add("Column1", typeof(string));
table.Columns.Add("Column2", typeof(string));
table.Columns.Add("Column3", typeof(string));
for (int i = 0; i < 1000000; i++)
{
table.Rows.Add(i.ToString(), "Indocin", "David");
}
}
}
public static class ControlHelpers
{
public static void InvokeIfRequired<T>(this T control, Action<T> action) where T : ISynchronizeInvoke
{
if (control.InvokeRequired)
{
control.Invoke(new Action(() => action(control)), null);
}
else
{
action(control);
}
}
}
}