public void UpdateSettings() { if (IsDisposed) { return; } if (InvokeRequired) { Invoke((MethodInvoker) delegate { UpdateSettings(); }); return; } isUpdating = true; translatableLanguages.Clear(); ocrableLanguages.Clear(); if (Program.ActiveOcrEngine != null) { if (Program.ActiveOcrEngine.IsInstalled) { foreach (string language in Program.ActiveOcrEngine.SupportedLanguages.Keys) { CultureInfo culture = CultureInfo.GetCultureInfo(language); if (!ocrableLanguages.Contains(culture.DisplayName)) { ocrableLanguages.Add(culture.DisplayName); } } } else { OcrEngineType engineType = OcrEngine.GetType(Program.ActiveOcrEngine.GetType()); foreach (Dictionary <OcrEngineType, List <string> > remoteTypes in OcrNetwork.RemoteTypes.Values) { if (remoteTypes.ContainsKey(engineType)) { List <string> supportedLanguages = remoteTypes[engineType]; foreach (string language in supportedLanguages) { // Remote PC may support different cultures //CultureInfo culture = CultureInfo.GetCultureInfo(language); CultureInfo culture = null; if (LocaleHelper.TryParseCulture(language, out culture) && !ocrableLanguages.Contains(culture.DisplayName)) { ocrableLanguages.Add(culture.DisplayName); } } } } } } if (Program.ActiveTranslator != null) { foreach (string language in Program.ActiveTranslator.SupportedLanguages.Keys) { CultureInfo culture = CultureInfo.GetCultureInfo(language); if (!translatableLanguages.Contains(culture.DisplayName)) { translatableLanguages.Add(culture.DisplayName); } } } availableEngines.Clear(); foreach (var value in Enum.GetValues(typeof(OcrEngineType))) { OcrEngineType type = (OcrEngineType)value; if (RemoteOcr.IsRemote(type) || OcrEngine.Create(type).IsInstalled) { availableEngines.Add(type); } } UpdateLanguageComboBoxStyle(); UpdateEngineComboBoxStyle(); RunOcr(); isUpdating = false; }