WaypointIconDictionary

WaypointIconDictionary

我的代码抛出一个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具有令人讨厌的副作用,导致该线程再次调用此方法。


单步执行代码或记录要添加的内容,以便了解发生了什么。

08-16 17:52