我遇到了一些問題。有時,當我嘗試調用下面的代碼時,remove方法會拋出一個異常,並顯示消息「該密鑰不在字典中」。C#異常:密鑰在字典中不存在
private Dictionary<IPAddress, ARPHostEntry> dIPHostTable;
private Dictionary<MACAddress, ARPHostEntry> dMACHostTable;
public HostTable()
{
dIPHostTable = new Dictionary<IPAddress, ARPHostEntry>();
dMACHostTable = new Dictionary<MACAddress, ARPHostEntry>();
}
public void AddHost(ARPHostEntry arphEntry)
{
lock (dMACHostTable)
{
if (dMACHostTable.ContainsKey(arphEntry.MAC))
{
dMACHostTable.Remove(arphEntry.MAC);
}
dMACHostTable.Add(arphEntry.MAC, arphEntry);
}
lock (dIPHostTable)
{
if (dIPHostTable.ContainsKey(arphEntry.IP))
{
dIPHostTable.Remove(arphEntry.IP);
}
dIPHostTable.Add(arphEntry.IP, arphEntry);
}
}
類ARPHostEntry是一個簡單的CALSS保持的IP地址和相關聯的MAC-地址在這個類既fiels是隻讀的。 該程序是多線程的,但每當我使用它時,都會鎖定該類中的字典。
我很無奈。爲什麼會出現這種例外情況?
與問候
編輯
爲了澄清,公認的答案是正確的。生成的異常是由跨線程訪問我的字典引起的問題。
O_O。 好的,我會重新檢查一下。 奇怪。 我會嘗試只更新值。謝謝。 – Emiswelt
@Emiswelt:讓我們知道它是否有效(或不)。 –
我可能有點晚了,但我按照你的建議修復了它。與調用類中的清潔多線程模型(ISyncrhonizeInvoke)一起,它現在可以工作。 – Emiswelt