我的代码抛出一个Argument Exception,抱怨“已经添加了具有相同键的项”。
我锁定了抱怨的对象,所以我不知道如何在另一个线程上对其进行更新。
WaypointIconDictionary是静态的。
这是代码
try
{
lock (WaypointIconDictionary)
{
if (!WaypointIconDictionary.ContainsKey(waypoint.TypeOfWaypoint))
{
var thisIcon = waypoint.Icon;
var index = IconCache.LoadIcon(thisIcon, thisIcon.Width / 2, thisIcon.Height);
WaypointIconDictionary.Add(waypoint.TypeOfWaypoint, index);
}
IconCache.DrawIcon(graphics, x, y, WaypointIconDictionary[waypoint.TypeOfWaypoint], false);
}
}
catch (Exception ex)
{
Logger.Error("Waypoint drawing {0}", ex.Message);
}
最佳答案
这可能根本不是锁定问题:可能是您实际上试图两次添加相同的密钥。
如果您完全确定这是将新条目添加到词典的唯一位置,则此异常可能仅由以下原因引起:waypoint
被另一个线程覆盖IconCache.LoadIcon
具有令人讨厌的副作用,导致该线程再次调用此方法。
单步执行代码或记录要添加的内容,以便了解发生了什么。