else if (!registryData.ContainsKey(keyName))
{
keyInvolved = new RegistryKy(keyName);
lock (registryDataLock)
{
registryData.Add(keyName, keyInvolved);
}
processInvolved = new Proces(procInvolved);
keyInvolved.addProcessToDict(processInvolved);
}
keyName является Строка, которая представляет ключ реестра. keyInvolved является фактическим объектом ключа реестра.
Мне говорят, что я добавляю ключ, который уже существует, уже я уже проверил, чтобы видеть, является ли это там или нет???
Это должно быть примерно так:
else if (!registryData.ContainsKey(kyInvolved))
{
//keyInvolved = new RegistryKy(kyInvolved);
lock (registryDataLock)
{
//registryData.Add(kyInvolved, keyInvolved);
registryData.Add(kyInvolved, new RegistryKy(kyInvolved));
}
processInvolved = new Proces(procInvolved);
keyInvolved.addProcessToDict(processInvolved);
}
Это попытка, но тот факт, что у вас есть lock
на registryDataLock
, говорит мне о многопоточности. Возможно ли, что другой поток добавляет ключ в словарь после вызова ContainsKey
, но до вызова Add
?
Кроме того, переменные с одинаковыми именами делают этот код довольно трудным для чтения...