我的代码抛出一个参数异常,抱怨“具有相同密钥的项目已被添加。”
我锁定了抱怨的对象,所以我不知道如何在另一个线程上更新它。
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