Dictionary/Hashmap … что же, спрашивается, происходит?

else if (!registryData.ContainsKey(keyName))
{
    keyInvolved = new RegistryKy(keyName);
    lock (registryDataLock)
    {
        registryData.Add(keyName, keyInvolved);
    }
    processInvolved = new Proces(procInvolved);
    keyInvolved.addProcessToDict(processInvolved);
}

keyName является Строка, которая представляет ключ реестра. keyInvolved является фактическим объектом ключа реестра.

Мне говорят, что я добавляю ключ, который уже существует, уже я уже проверил, чтобы видеть, является ли это там или нет???

1
задан skaffman 23 December 2010 в 05:11
поделиться

2 ответа

Это должно быть примерно так:

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);
}
-1
ответ дан 3 September 2019 в 00:07
поделиться

Это попытка, но тот факт, что у вас есть lock на registryDataLock, говорит мне о многопоточности. Возможно ли, что другой поток добавляет ключ в словарь после вызова ContainsKey, но до вызова Add?

Кроме того, переменные с одинаковыми именами делают этот код довольно трудным для чтения...

2
ответ дан 3 September 2019 в 00:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: