3

我试图从使用多线程的计时器中对我的数据网格视图进行数据绑定。计时器在那里,因为我们需要它来显示实时数据。

我使用的代码是 -

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”从创建它的线程以外的线程访问。

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

干杯

4

1 回答 1

6

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

像这样改变你的方法:

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

void InnerLoadData()
{
    dt = JobManager.GetTodaysJobs();
    dataGridView1.AutoGenerateColumns = false;
    dataGridView1.DataSource = dt;
}
于 2013-07-08T08:34:36.520 回答