diff --git a/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Colors/XLColor_Static.cs b/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Colors/XLColor_Static.cs index dfaaaa7..d66e191 100644 --- a/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Colors/XLColor_Static.cs +++ b/ClosedXML/ClosedXML/ClosedXML/Excel/Style/Colors/XLColor_Static.cs @@ -7,14 +7,19 @@ { public partial class XLColor { - private static Dictionary byColor = new Dictionary(); + private static readonly Dictionary ByColor = new Dictionary(); + private static readonly Object ByColorLock = new Object(); + public static XLColor FromColor(Color color) { XLColor ret; - if (!byColor.TryGetValue(color, out ret)) + lock (ByColorLock) { - ret = new XLColor(color); - byColor.Add(color, ret); + if (!ByColor.TryGetValue(color, out ret)) + { + ret = new XLColor(color); + ByColor.Add(color, ret); + } } return ret; } @@ -44,50 +49,65 @@ return FromColor(ColorTranslator.FromHtml(htmlColor)); } - private static Dictionary byIndex = new Dictionary(); + private static readonly Dictionary ByIndex = new Dictionary(); + private static readonly Object ByIndexLock = new Object(); + public static XLColor FromIndex(Int32 index) { XLColor ret; - if (!byIndex.TryGetValue(index, out ret)) + lock (ByIndexLock) { - ret = new XLColor(index); - byIndex.Add(index, ret); + if (!ByIndex.TryGetValue(index, out ret)) + { + ret = new XLColor(index); + ByIndex.Add(index, ret); + } } return ret; } - private static Dictionary byTheme = new Dictionary(); + private static readonly Dictionary ByTheme = new Dictionary(); + private static readonly Object ByThemeLock = new Object(); + public static XLColor FromTheme(XLThemeColor themeColor) { XLColor ret; - if (!byTheme.TryGetValue(themeColor, out ret)) + lock (ByThemeLock) { - ret = new XLColor(themeColor); - byTheme.Add(themeColor, ret); + if (!ByTheme.TryGetValue(themeColor, out ret)) + { + ret = new XLColor(themeColor); + ByTheme.Add(themeColor, ret); + } } return ret; } - private static Dictionary> byThemeTint = new Dictionary>(); + private static readonly Dictionary> ByThemeTint = new Dictionary>(); + private static readonly Object ByThemeTintLock = new Object(); + public static XLColor FromTheme(XLThemeColor themeColor, Double themeTint) { XLColor ret; - Dictionary themeTints; - if (byThemeTint.TryGetValue(themeColor, out themeTints)) + lock (ByThemeTintLock) { - if (!themeTints.TryGetValue(themeTint, out ret)) + Dictionary themeTints; + if (ByThemeTint.TryGetValue(themeColor, out themeTints)) { + if (!themeTints.TryGetValue(themeTint, out ret)) + { + ret = new XLColor(themeColor, themeTint); + themeTints.Add(themeTint, ret); + } + } + else + { + themeTints = new Dictionary(); ret = new XLColor(themeColor, themeTint); themeTints.Add(themeTint, ret); - } - } - else - { - themeTints = new Dictionary(); - ret = new XLColor(themeColor, themeTint); - themeTints.Add(themeTint, ret); - byThemeTint.Add(themeColor, themeTints); + ByThemeTint.Add(themeColor, themeTints); + } } return ret; }