从不同的线程同时在DataSet中添加和删除行

时间:2016-07-03 17:43:08

标签: c# multithreading concurrency dataset locking

我认为我知道lock语句是如何工作的,但似乎我没有...我试图实现能够在{{1}中添加和删除行的功能并发来自不同的线程(WinForms项目)。因此,一个线程在每个时间间隔向DataSet添加新行,而其他线程正在从同一DataSet删除行。我认为DataSet总是要删除一些行 - 我想在这里专注于多线程问题。将行添加到DataSet的线程比删除行的线程更快。为了创建新线程,我使用DataSet类,在这个类上创建新实例时启动新线程。我不明白为什么在我的代码中使用System.Threading.Timer语句时仍然会得到System.InvalidOperationException。进一步的消息是:"附加信息:检测到跨线程操作。"

我应该如何使用lock声明? 我应该在哪里将lock语句放在我的代码中?

代码:

lock

1 个答案:

答案 0 :(得分:1)

问题不在于lock语句,而在于从非线程的线程访问UI控件(从数据源中删除行)。

实际上你在添加行时是正确的,所以在删除时也一样 - 使用表单的Invoke方法以便在正确的线程上执行委托。