跨线程问题

本文关键字:问题 线程 | 更新日期: 2023-09-27 18:00:18

我有一个按钮,代码为

    new Thread(() =>
    {
        DataTable table = Finish(txtTest.Text);
        //dgwTest.DataSource = table
    }).Start();

我想设置datagridview数据源,但我得到了一个"跨线程"异常。有人知道我该如何避免这种情况吗?

跨线程问题

string source=txtTest.Text;

new Thread(() =>
{
      DataTable table = Finish(source);
      dgwTest.Invoke ((Action) (() => dgwTest.DataSource = table));
}).Start(); 

您需要在DataGridView 上使用Invoke方法

private delegate void SetDGVValueDelegate(DataTable table);
private void button1_Click(object sender, EventArgs e)
{
    new Thread(() =>    {        
        DataTable table = Finish(txtTest.Text);
        SetDGVValue(table);
    }).Start();
}
private void SetDGVValue(DataTable table) 
{ 
    if (dataGridView1.InvokeRequired) 
    { 
        dataGridView1.Invoke(new SetDGVValueDelegate(SetDGVValue), table); 
    } 
    else 
    { 
        dataGridView1.DataSource = table; 
    } 
}