当DEBUG没有时,EXE抛出错误

时间:2012-08-29 17:23:15

标签: c# .net exception-handling visual-studio-debugging

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

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

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

2 个答案:

答案 0 :(得分:3)

LoadedItem应该有效

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

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

如果您阅读的内容不仅仅是写作,请使用ReaderWriterLockSlim来提高效果。

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

答案 1 :(得分:1)

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

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