C# 显示Ajax GIF显示错误(类型为的未处理异常)

C# 显示Ajax GIF显示错误(类型为的未处理异常),c#,datagridview,C#,Datagridview,我是C#新手,在C#windows窗体中执行繁重任务时,我需要显示一个繁忙的加载程序。这就是我们迄今为止所做的尝试,它表明了这一错误 {"Cross-thread operation not valid: Control 'dataGridView1' accessed from a thread other than the thread it was created on."} 这是我的密码 //窗口窗体 Ajax装载机; //此表单由菜单按钮调用,因此它应该加载表 公

我是C#新手,在C#windows窗体中执行繁重任务时,我需要显示一个繁忙的加载程序。这就是我们迄今为止所做的尝试,它表明了这一错误

{"Cross-thread operation not valid: Control 'dataGridView1' accessed from a thread other than the thread it was created on."}
这是我的密码

//窗口窗体
Ajax装载机;
//此表单由菜单按钮调用,因此它应该加载表
公共表格1()
{
初始化组件();
加载器=新的AjaxLoader();
in_it();
}
无效
{           
ThreadStart ThreadStart=新的ThreadStart(执行);
螺纹=新螺纹(螺纹开始);
SetApartmentState(ApartmentState.STA);
thread.Start();
}
私人无效执行()
{
调用((MethodInvoker)委托{loader.Show();});
Application.DoEvents();
loadData();
调用((MethodInvoker)委托{loader.Dispose();});
}
公共void loadData()
{
dataGridView1.GridColor=Color.FromArgb(240240240);
IList emp=HibenateDao.getRecords(“来自雇主实体u”);
dataGridView1.DataSource=emp;//此处发生错误
}

您需要调用行
loadData()
执行
方法中,确保后台
UI
线程是在
加载数据
中对
UI
进行更改的唯一到达代码的线程。要调用它,请在类中创建一个
委托

 private delegate void UpdateUI();
然后使用它来调用

private void Execution()
{
    if(InvokeRequired) 
    {
       Invoke(new UpdateUI(Execution));
       return;
    }
    //Now only the UI-thread reaches this code

    dataGridView1.Invoke((MethodInvoker)delegate { loader.Show(); });
    Application.DoEvents();
    
    loadData();

    dataGridView1.Invoke((MethodInvoker)delegate { loader.Dispose(); });
}
现在,您还应该能够将您的方法重写为

private void Execution()
{
    if(InvokeRequired) 
    {
       Invoke(new UpdateUI(Execution));
       return;
    }

    loader.Show();
    Application.DoEvents();          
    loadData();
    loader.Dispose();
}

错误告诉您出了什么问题:您无法从另一个线程访问gui线程中运行的控件,因为没有gui上下文。@Homungus我需要对代码执行什么操作?请阅读此处并查看@MarkusAnd的答案