0

该程序有一个弹出的表格,您在几个字段中输入文本,然后按关闭。关闭后,输入的信息将保存到一个类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 语句。

如果您需要更多信息,请告诉我。

我会很感激任何帮助,对于我的生活,我无法弄清楚为什么会发生这种情况。

4

2 回答 2

3

LoadedItem应该工作

lock(LoadedItem) {
    if (!LoadedItem.Contains(newItem))
       LoadedItem.Add(newItem);
}

请注意,您必须在代码中写入和读取 LoadedItem 的每个点上使用锁定。

如果您阅读多于写入,请使用ReaderWriterLockSlim更好的性能。

如果您使用的是 .Net4,则可以使用System.Collections.Concurrent命名空间中的一些集合。

于 2012-08-29T19:19:49.050 回答
1

这听起来像是一个线程问题。确保 LoadedItem 和 NewItem 是本地绑定的变量,因此这两个引用保证是同一个对象。

出于调试目的,将“包含”和“添加”替换为您可以调查其行为的包装函数。

于 2012-08-29T17:33:19.460 回答