// Simple helper to ease maintenance and improve readability. private static void AddResourceSet(Dictionary <string, ResourceSet> localResourceSets, string cultureName, ref ResourceSet rs) { // InternalGetResourceSet is both recursive and reentrant - // assembly load callbacks in particular are a way we can call // back into the ResourceManager in unexpectedly on the same thread. lock (localResourceSets) { // If another thread added this culture, return that. ResourceSet?lostRace; if (localResourceSets.TryGetValue(cultureName, out lostRace)) { if (!object.ReferenceEquals(lostRace, rs)) { // Note: In certain cases, we can be trying to add a ResourceSet for multiple // cultures on one thread, while a second thread added another ResourceSet for one // of those cultures. If there is a race condition we must make sure our ResourceSet // isn't in our dictionary before closing it. if (!localResourceSets.ContainsValue(rs)) { rs.Dispose(); } rs = lostRace; } } else { localResourceSets.Add(cultureName, rs); } } }
static ResourceManager LoadLanguage(CultureInfo culture, ref ResourceSet rs) { Current = culture; if (rs != null) { rs.Dispose(); rs = null; } try { ResourceManager rManager = new ResourceManager("XPloit.Res.Res", typeof(Lang).Assembly) { IgnoreCase = true }; rs = rManager.GetResourceSet(culture, true, true); return rManager; } catch { } return null; }
// Private method in framework, had to be re-implemented here. private static void AddResourceSet(Hashtable localResourceSets, CultureInfo culture, ref ResourceSet resourceSet) { lock (localResourceSets) { ResourceSet localResourceSet = (ResourceSet)localResourceSets[culture]; if (localResourceSet != null) { if (!Equals(localResourceSet, resourceSet)) { resourceSet.Dispose(); resourceSet = localResourceSet; } } else { localResourceSets.Add(culture, resourceSet); } } }
//private method in framework, had to be re-specified private static void AddResourceSet(Hashtable localResourceSets, CultureInfo culture, ref ResourceSet rs) { lock (localResourceSets) { ResourceSet objA = (ResourceSet)localResourceSets[culture]; if (objA != null) { if (!object.Equals(objA, rs)) { rs.Dispose(); rs = objA; } } else { localResourceSets.Add(culture, rs); } } }
private static void AddResourceSet(Dictionary <string, ResourceSet> localResourceSets, string cultureName, ref ResourceSet rs) { lock (localResourceSets) { ResourceSet set; if (localResourceSets.TryGetValue(cultureName, out set)) { if (!object.ReferenceEquals(set, rs)) { if (!localResourceSets.ContainsValue(rs)) { rs.Dispose(); } rs = set; } } else { localResourceSets.Add(cultureName, rs); } } }
// Simple helper to ease maintenance and improve readability. private static void AddResourceSet(Dictionary<String,ResourceSet> localResourceSets, String cultureName, ref ResourceSet rs) { // InternalGetResourceSet is both recursive and reentrant - // assembly load callbacks in particular are a way we can call // back into the ResourceManager in unexpectedly on the same thread. lock(localResourceSets) { // If another thread added this culture, return that. ResourceSet lostRace; if (localResourceSets.TryGetValue(cultureName, out lostRace)) { if (!Object.ReferenceEquals(lostRace, rs)) { // Note: In certain cases, we can be trying to add a ResourceSet for multiple // cultures on one thread, while a second thread added another ResourceSet for one // of those cultures. If there is a race condition we must make sure our ResourceSet // isn't in our dictionary before closing it. if (!localResourceSets.ContainsValue(rs)) rs.Dispose(); rs = lostRace; } } else { localResourceSets.Add(cultureName, rs); } } }
private static void AddResourceSet(IDictionary<CultureInfo, ResourceSet> localResourceSets, CultureInfo culture, ref ResourceSet rs) { lock (localResourceSets) { if (localResourceSets.ContainsKey(culture)) { var existing = localResourceSets[culture]; if (existing == null || Equals(existing, rs)) return; rs.Dispose(); rs = existing; } else { localResourceSets.Add(culture, rs); } } }
private static void AddResourceSet(Dictionary<string, ResourceSet> localResourceSets, string cultureName, ref ResourceSet rs) { lock (localResourceSets) { ResourceSet set; if (localResourceSets.TryGetValue(cultureName, out set)) { if (!object.ReferenceEquals(set, rs)) { if (!localResourceSets.ContainsValue(rs)) { rs.Dispose(); } rs = set; } } else { localResourceSets.Add(cultureName, rs); } } }
// Simple helper to ease maintenance and improve readability. private static void AddResourceSet(Hashtable localResourceSets, CultureInfo culture, ref ResourceSet rs) { // InternalGetResourceSet is both recursive and reentrant - // assembly load callbacks in particular are a way we can call // back into the ResourceManager in unexpectedly on the same thread. lock(localResourceSets) { // If another thread added this culture, return that. ResourceSet lostRace = (ResourceSet) localResourceSets[culture]; if (lostRace != null) { if (!Object.Equals(lostRace, rs)) { rs.Dispose(); rs = lostRace; } } else { localResourceSets.Add(culture, rs); } } }