private void run(object state) { try { Dispatcher.Invoke(new Action(() => { panelLogin.IsEnabled = false; progressBarLoading.Visibility = Visibility.Visible; })); Database database = new Database { IpAddress = Settings.Default.databaseHost, Username = Settings.Default.databaseUsername, Password = Settings.Default.databasePassword }; query = new Query(database); companies = query.getCompanies(); //query.fillGeofences(company); //users = query.getUsers(company, user); int count = 0; foreach (Company companyItem in companies) { query.getUser(companyItem, user); //users = query.fillUsers(companyItem, user); //companyItem.Trackers = query.getTrackers(companyItem, users); Dispatcher.Invoke(new Action(() => { panelLogin.ErrorNote = "Loading companies... " + (++count).ToString() + "/" + companies.Count.ToString(); })); } Dispatcher.Invoke(new Action(() => { Settings.Default.accountCompanyUsername = panelLogin.CompanyUsername; Settings.Default.accountUsername = panelLogin.Username; Settings.Default.accountPassword = panelLogin.Password; Settings.Default.accountRememberMe = (bool)panelLogin.RememberMe; Settings.Default.Save(); FormMain formMain = new FormMain(company, user, companies, database); formMain.Show(); this.Close(); })); } catch (DatabaseException databaseException) { Debug.Print(databaseException.Message); Dispatcher.Invoke(new Action(() => { panelLogin.ErrorNote = databaseException.Message; TextLog.Write(databaseException); })); } catch (Exception exception) { Debug.Print(exception.Message); Dispatcher.Invoke(new Action(() => { panelLogin.ErrorNote = exception.Message; TextLog.Write(exception); })); } finally { Dispatcher.Invoke(new Action(() => { panelLogin.IsEnabled = true; progressBarLoading.Visibility = Visibility.Hidden; })); } }