多线程应用程序中的数据绑定datagridview

时间:2013-07-08 07:56:32

标签: c# multithreading winforms datagridview

我试图使用多线程从计时器中数据化我的数据网格视图。我们需要它来显示实时数据。

使用的代码是 -

private void Form1_Load(object sender, EventArgs e)
    {
        dt = JobManager.GetTodaysJobs();
        trd = new Thread(StartTimer);
        trd.Start();
    }

    void StartTimer()
    {
        timer1.Start();
        LoadData();
    }

    void LoadData()
    {
        dt = JobManager.GetTodaysJobs();
        dataGridView1.AutoGenerateColumns = false;
        dataGridView1.DataSource = dt;
    }

    private void timer1_Tick(object sender, EventArgs e)
    {
        LoadData();
    }

但是,我收到以下错误 -

跨线程操作无效:控制'dataGridView1'从其创建的线程以外的线程访问。

我有什么想法可以解决这个问题吗?

干杯

1 个答案:

答案 0 :(得分:6)

您无法从不是这些对象的创建者的线程更新UI元素。

改变你的方法:

void LoadData()
{
    if (InvokeRequired)
                Invoke(new MethodInvoker(InnerLoadData));
}

void InnerLoadData()
{
    dt = JobManager.GetTodaysJobs();
    dataGridView1.AutoGenerateColumns = false;
    dataGridView1.DataSource = dt;
}