发生了System.ArgumentException

时间:2014-07-07 14:39:13

标签: c# pocketpc

我得到了一个奇怪的行为。这是代码:

...
private Object lockobj = new Object();
private Dictionary<String, BasicTagBean> toVerifyTags = null;

public void verifyTags(List<BasicTagBean> tags)
{
    System.Diagnostics.Debug.WriteLine("Thread ID: " + Thread.CurrentThread.ManagedThreadId);
    lock (lockobj)
    {
        foreach (BasicTagBean tag in tags)
        {
            if (!alreadyVerified.ContainsKey(tag.EPC))
            {
                toVerifyTags.Add(tag.EPC, tag);
            }
        }
    }
...

有时候我得到了这个例外

'System.ArgumentException' occurred in mscorlib.dll

在这行代码中:

toVerifyTags.Add(tag.EPC, tag);

异常是指将已存在的元素错误添加到集合中,但我检查了这一点。可能是一个线程问题,但应用程序输出显示始终相同的线程ID。我使用的是c#pocketpc 3.5版。

1 个答案:

答案 0 :(得分:2)

异常似乎告诉您,您尝试在toVerifyTags中添加的密钥已经存在。你没有检查密钥是否已存在于正确的字典中。

public void verifyTags(List<BasicTagBean> tags)
{
    System.Diagnostics.Debug.WriteLine("Thread ID: " + Thread.CurrentThread.ManagedThreadId);
    lock (lockobj)
    {
        foreach (BasicTagBean tag in tags)
        {
            if (!toVerifyTags.ContainsKey(tag.EPC))
            {
                toVerifyTags.Add(tag.EPC, tag);
            }
        }
    }