新线程内的DataGridView默认错误

时间:2014-06-21 11:07:21

标签: c# mysql datagridview

我真的不知道我的编程是否正确,所以我希望能指出我。
我有一个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

我认为错误可能是由于this this.studentinfoTableAdapter.Fill(this.schoolDataSet.studentinfo);发生冲突导致的错误我确实纠正了错误,但错误仍然存​​在。
任何建议都可以帮助我和赞赏。

1 个答案:

答案 0 :(得分:0)

最后我明白了, 经过几个小时的搜索,阅读和尝试后,我发现我应该使用Invoke到帖子this.studentinfoTableAdapter.Fill(this.schoolDataSet.studentinfo);内的这一特定行。所以它变为如下:
{{1} }
我认为错误是因为这一行调用了主线程中的一些功能来更新datagridview,而新线程执行并且以编程方式存在this.Invoke(new MethodInvoker(delegate { this.studentinfoTableAdapter.Fill(this.schoolDataSet.studentinfo);}));所以除了主线程之外,阻止了修改或编辑GUI,因此出现错误来自线程行为!这就是我对此的理解。
如果我错了,请指出我。