我真的不知道我的编程是否正确,所以我希望能指出我。
我有一个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){...}
}
然后在每个新的插入操作中弹出一个新的对话框错误并且没有保存,这里是错误:
我认为错误可能是由于this
this.studentinfoTableAdapter.Fill(this.schoolDataSet.studentinfo);
发生冲突导致的错误我确实纠正了错误,但错误仍然存在。
任何建议都可以帮助我和赞赏。
答案 0 :(得分:0)
最后我明白了,
经过几个小时的搜索,阅读和尝试后,我发现我应该使用Invoke
到帖子this.studentinfoTableAdapter.Fill(this.schoolDataSet.studentinfo);
内的这一特定行。所以它变为如下:
{{1} }
我认为错误是因为这一行调用了主线程中的一些功能来更新datagridview,而新线程执行并且以编程方式存在this.Invoke(new MethodInvoker(delegate { this.studentinfoTableAdapter.Fill(this.schoolDataSet.studentinfo);}));
所以除了主线程之外,阻止了修改或编辑GUI,因此出现错误来自线程行为!这就是我对此的理解。
如果我错了,请指出我。