gpt4 book ai didi

c# - DataGridView 新线程内默认报错

转载 作者:行者123 更新时间:2023-11-30 23:00:21 34 4
gpt4 key购买 nike

真的,我不知道我的做法在编程上是否正确,所以我希望指出我。
我有一个 DataGridView C# 显示来自链接的 MySQL 数据库的数据和一些输入框以帮助将数据插入数据库并且一切正常,但是当我决定在单独的新线程中进行插入操作时,我在添加按钮中执行以下操作:

private void AddToolStripMenuItem_Click(object sender, EventArgs e){
try{
new thread(() =>{
// insertion code goes here
//to update DataGridView after inserting
this.studentinfoTableAdapter.Fill(this.schoolDataSet.studentinfo);
}).start();
}catch(exception ex){...}
}

然后在每个新的插入操作中弹出一个新的对话框错误并且没有保存任何内容,这是错误:
DataGridView default error

我认为错误可能是由于 thisthis.studentinfoTableAdapter.Fill(this.schoolDataSet.studentinfo); 中发生冲突引起的,我确实更正了它,但错误仍然存​​在。
任何建议都可以帮助我并表示赞赏。

最佳答案

我终于明白了经过几个小时的搜索、阅读和尝试,我发现我应该对线程 this.studentinfoTableAdapter.Fill(this.schoolDataSet.studentinfo); 中的这一特定行使用 Invoke
所以它变成如下:
this.Invoke(new MethodInvoker(delegate { this.studentinfoTableAdapter.Fill(this.schoolDataSet.studentinfo);}));
我认为错误是因为这条线从主线程调用一些功能来更新datagridview,而新线程正在执行并且以编程方式存在跨线程操作异常所以修改或编辑GUI被阻止除了来自主线程,因此线程行为会导致错误!我就是这么理解的。
如果我错了请指出我。

关于c# - DataGridView 新线程内默认报错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24340982/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com