c# - 当我修改DataGridView时,它给system.invalidoperationexception跨线程操作无效?
问题描述
我有一个 SQLite 数据库,我有一个 Windows 窗体应用程序。该表格中有一个DataGridView
有 4 列的表格。我使用计时器来更新我的DataGridView
内容。
但是每次我清除DataGridView
然后我都会填写它,因为我必须按日期对它们进行排序。如果我不使用它.Rows.Clear()
,.Refresh
它会一遍又一遍地添加相同的内容。所以我使用它们。
我使用不同的方式,如注释行,但问题是
system.invalidoperationexception cross-thread operation not valid
我已经尝试了 StackOverflow 和整个互联网的所有解决方案,但一直给我同样的例外。
我的问题是什么。我直接调用了这个方法,我把它作为一个线程调用,它给了我同样的异常。当我使用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();
}
解决方案
这是异常的解决方案。
private void guncellemeIslemGecmisiGoster()
{
dt = db.TumGuncellemeIslemGecmisiGetir();
dgwIslemGecmisi.Invoke(new Action(() => dgwIslemGecmisi.DataSource = dt));
dgwIslemGecmisi.Invoke(new Action(() => dgwIslemGecmisi.Update()));
dt.Dispose();
}
推荐阅读
- generics - 如何将 ObservableObject viewModel 中的 GENERIC @Published 属性传递给视图?
- excel - Excel电子表格计算缓慢
- r - plotly::add_segment 中的虚线
- google-analytics - Google Analytics - gtag 媒体资源
- jpa - Spring Data Repository - 复合键 & 不需要保存实体
- c# - 垃圾收集的正确位置 处置模式中的文件类型
- reactjs - Material-UI 和 reactstrap 可以共存于同一个 Reactjs 应用程序中吗?
- amazon-web-services - 将 DNS 从 Route53 移动到 Cloudflare 后了解 TXT 记录
- ios - Swift:避免滚动前 2 个表格视图单元格
- javascript - 通过添加标题和一些计算数据将两个 excel 数据导出到单个 excel 表中