我的代碼拋出一個參數異常,抱怨「具有相同密鑰的項目已被添加。」
我鎖定了抱怨的對象,所以我不知道如何在另一個線程上更新它。
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);
}
您應該鎖定在不同的對象上,同時查看['ConcurrentDictionary'](http://msdn.microsoft.com/zh-cn/library/dd287191(v = vs.110).aspx)for multi線程應用程序 –
user2711965
「我不知道它是如何在另一個線程上更新的。」也許其他更新來自不鎖定的方法?.. – dasblinkenlight
鎖應該是私有靜態的,試圖創建一個專用鎖對象:private static readonly Object lockKey = new Object(); – WhoIsRich