程序弹出一个表单,在几个字段中输入文本,然后按关闭。关闭后,输入的信息将保存到课程newItem
。
当我按F5调试我的程序时,一切正常。但是当我从我的调试文件夹运行可执行文件时,我收到了这个错误。
System.ArgumentException: An item with the same key has already been added.
At.... line 168
这是代码。
if (!LoadedItem.Contains(newItem))
{
LoadedItem.Add(newItem);
}
我放置了一个断点,逐步完成代码,一切似乎都应该如此。如果LoadedItem
已包含newItem
,则会跳过此选项。但由于某种原因,似乎忽略了.exe中的if语句。
如果您需要更多信息,请告诉我。
我很感激任何帮助,对于我的生活,我无法弄清楚为什么会这样。
答案 0 :(得分:3)
锁LoadedItem
应该有效
lock(LoadedItem) {
if (!LoadedItem.Contains(newItem))
LoadedItem.Add(newItem);
}
请注意,您必须在代码中的每个点上使用锁定,您可以在其中写入和读取LoadedItem。
如果您阅读的内容不仅仅是写作,请使用ReaderWriterLockSlim
来提高效果。
如果您使用的是.Net4,则可以使用System.Collections.Concurrent
命名空间中的某些集合。
答案 1 :(得分:1)
这听起来像是一个线程问题。确保LoadedItem和NewItem是本地绑定变量,因此保证两个引用是同一个对象。
出于调试目的,将“包含”和“添加”替换为可以调查其行为的包装函数。