/// <summary> /// Lazy Loads the text for each Control in form /// </summary> /// <param name="ControlDefaultValues">A dictionary with ControlName-Text pairs</param> public static Thread LazyLoadTranslations(FinOrgForm f) { try { Thread t = new Thread(() => { // Get a list of items to fetch IEnumerable <string> items = f.ControlDefaultValues.Values; if (Translations != null) { items = items.Except(Translations.Keys).ToArray(); } SqlConnection con = FinOrgForm.getSqlConnection(); try { con.Open(); SqlCommand cmd = new SqlCommand(string.Format("SELECT text, {0} FROM TRANSLATIONS WHERE text IN ({{keys}});", currentLanguage), con); cmd.AddArrayParameters(items, "keys"); if (cmd.Parameters.Count > 0) { using (SqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { // Only Keys NOT Present in Translations Dictionary is fetched from Database if (!Translations.ContainsKey(reader["text"].ToString())) { Translations.Add(reader["text"].ToString(), reader[currentLanguage].ToString()); } } } } con.Close(); } catch (Exception e) { con.Close(); MessageBox.Show(e.Message, "FinOrg Languages LazyLoadTranslations"); } if (LANG_DEBUG_MODE) // Copies the value from form to database currentLanguage field { InsertFormTranslations(f.ControlDefaultValues); } // Apply Translation f.BeginInvoke(new Action(() => { ApplyTranslation(f); })); }); // finish this fast t.Priority = ThreadPriority.Highest; t.Start(); return(t); } catch (Exception ex) { return(null); } }