我有一个SQLite数据库,并且有一个Windows窗体应用程序。该格式有一个DataGridView
,其中有4列。我使用计时器更新了DataGridView
的内容。
但是,每次我清除DataGridView
,然后填写它是因为我必须按日期对它们进行排序。如果我不使用.Rows.Clear()
和.Refresh
,则会一遍又一遍地添加相同的内容。所以我用它们。
我使用不同的方式,例如注释行,但是问题是
system.invalidoperationexception cross-thread operation not valid
我已经尝试了StackOverflow和整个Internet的所有解决方案,但是所有方式都给了我同样的例外。
我怎么了?我直接调用了此方法,并将其作为线程调用,它给了我同样的异常。当我使用DataGridView
时,它给了我例外。例如,在此代码块中,它给出了dgwIslemGemisi.DataSource=dt;
private void guncellemeIslemGecmisiGoster()
{
dt = db.TumGuncellemeIslemGecmisiGetir();
dgwIslemGecmisi.DataSource = dt;
dgwIslemGecmisi.Update();
dgwIslemGecmisi.Rows.Clear();
dgwIslemGecmisi.Refresh();
////Set AutoGenerateColumns False
//dgwIslemGecmisi.AutoGenerateColumns = false;
////Set Columns Count
//dgwIslemGecmisi.ColumnCount = 4;
////Add Columns
//dgwIslemGecmisi.Columns[0].Name = "islemAdi";
//dgwIslemGecmisi.Columns[0].HeaderText = "İşlem Adı";
//dgwIslemGecmisi.Columns[0].DataPropertyName = "islemAdi";
//dgwIslemGecmisi.Columns[1].HeaderText = "İşleme Başlangıç Tarihi";
//dgwIslemGecmisi.Columns[1].Name = "islemBaslangicTarihi";
//dgwIslemGecmisi.Columns[1].DataPropertyName = "islemBaslangicTarihi";
//dgwIslemGecmisi.Columns[2].Name = "islemBitisTarihi";
//dgwIslemGecmisi.Columns[2].HeaderText = "İşlemin Tamamlanma Tarihi";
//dgwIslemGecmisi.Columns[2].DataPropertyName = "isleminBitisTarihi";
//dgwIslemGecmisi.Columns[3].Name = "islemDurumu";
//dgwIslemGecmisi.Columns[3].HeaderText = "İşlem Durumu";
//dgwIslemGecmisi.Columns[3].DataPropertyName = "islemDurumu";
//dgwIslemGecmisi.DataSource = dt;
//for (int i = 0; i < dt.Rows.Count; i++)
//{
// string durum = "Başarısız";
// if (dt.Rows[i]["islemDurumu"].ToString() == "1")
// {
// durum = "Başarılı";
// }
// dgwIslemGecmisi.Rows.Add(new object[] {
// dt.Rows[i]["islemAdi"].ToString(),
// dt.Rows[i]["islemBaslangicTarihi"].ToString(),
// dt.Rows[i]["islemBitisTarihi"].ToString(),
// durum
// });
//}
dt.Dispose();
}
答案 0 :(得分:0)
这是例外的解决方案。
private void guncellemeIslemGecmisiGoster()
{
dt = db.TumGuncellemeIslemGecmisiGetir();
dgwIslemGecmisi.Invoke(new Action(() => dgwIslemGecmisi.DataSource = dt));
dgwIslemGecmisi.Invoke(new Action(() => dgwIslemGecmisi.Update()));
dt.Dispose();
}