【问题标题】:databind datagridview in multithreadded application多线程应用程序中的数据绑定datagridview
【发布时间】:2013-07-05 11:40:15
【问题描述】:

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

我使用的代码是 -

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

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

干杯

【问题讨论】:

标签: c# multithreading winforms datagridview


【解决方案1】:

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

像这样改变你的方法:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 2011-04-29
    相关资源
    最近更新 更多