我试图使用多线程从计时器中数据化我的数据网格视图。我们需要它来显示实时数据。
使用的代码是 -
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'从其创建的线程以外的线程访问。
我有什么想法可以解决这个问题吗?
干杯
答案 0 :(得分:6)
您无法从不是这些对象的创建者的线程更新UI元素。
改变你的方法:
void LoadData()
{
if (InvokeRequired)
Invoke(new MethodInvoker(InnerLoadData));
}
void InnerLoadData()
{
dt = JobManager.GetTodaysJobs();
dataGridView1.AutoGenerateColumns = false;
dataGridView1.DataSource = dt;
}