System.ArgumentException произошла
Я получаю странное поведение. Это код:
...
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);
исключение относится к неправильному добавлению уже существующего элемента в коллекцию, но я проверяю это. Возможно проблема с потоком, но вывод приложения всегда показывает один и тот же идентификатор потока. Я использую C# pocketpc версии 3.5.
1 ответ
Решение
Кажется, исключение говорит вам, что ключ, который вы пытаетесь добавить в 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);
}
}
}