我认为我知道lock
语句是如何工作的,但似乎我没有...我试图实现能够在{{1}中添加和删除行的功能并发来自不同的线程(WinForms项目)。因此,一个线程在每个时间间隔向DataSet
添加新行,而其他线程正在从同一DataSet
删除行。我认为DataSet
总是要删除一些行 - 我想在这里专注于多线程问题。将行添加到DataSet
的线程比删除行的线程更快。为了创建新线程,我使用DataSet
类,在这个类上创建新实例时启动新线程。我不明白为什么在我的代码中使用System.Threading.Timer
语句时仍然会得到System.InvalidOperationException
。进一步的消息是:"附加信息:检测到跨线程操作。"
我应该如何使用lock
声明?
我应该在哪里将lock
语句放在我的代码中?
代码:
lock
答案 0 :(得分:1)
问题不在于lock
语句,而在于从非线程的线程访问UI控件(从数据源中删除行)。
实际上你在添加行时是正确的,所以在删除时也一样 - 使用表单的Invoke
方法以便在正确的线程上执行委托。