protected DataModel(ToolStripProgressBar progressBar, int incrementor, string selectQuery, string tableName) { var context = SynchronizationContext.Current; DmLoadType = DataModelLoadSyncType.Asyncronize; ThreadPool.QueueUserWorkItem((progress) => { try { DmLoadState = DataModelLoadState.Loading; using (var connection = new DBConnection()) using (var command = DBConnection.CreateCommand()) { command.CommandText = selectQuery; DbAccessSemaphore.WaitOne(); Interlocked.Exchange(ref _table, connection.SqlSelectTable(tableName, command)); } DbAccessSemaphore.Release(); ConfigureTable(); lock (LockObj) { DataSetManager.AddTable(Table); } DmLoadState = DataModelLoadState.SuccessLoad; if (progress != null) { context.Post(_ => { progressBar.Value += incrementor; if (progressBar.Value == progressBar.Maximum) { progressBar.Visible = false; //Если мы загрузили все данные, то запускаем CallbackUpdater DataModelsCallbackUpdater.GetInstance().Run(); CalcDataModelsUpdater.GetInstance().Run(); } }, null); } } catch (SqlException e) { lock (LockObj) { MessageBox.Show(String.Format(CultureInfo.InvariantCulture, "Произошла ошибка при загрузке данных из базы данных. Подробная ошибка: {0}", e.Message), "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); DmLoadState = DataModelLoadState.ErrorLoad; Application.Exit(); } } catch (DataModelException e) { MessageBox.Show(e.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); DmLoadState = DataModelLoadState.ErrorLoad; } }, progressBar); }
private void MainForm_Load(object sender, EventArgs e) { UserDomain user = null; if (LicenseSoftwareSettings.UseLdap) { user = UserDomain.Current; } if (user == null) { toolStripLabelHelloUser.Text = ""; } else { toolStripLabelHelloUser.Text = @"Здравствуйте, " + user.DisplayName; } //Загружаем права пользователя AccessControl.LoadPriveleges(); if (AccessControl.HasNoPriveleges()) { MessageBox.Show(@"У вас нет прав на использование данного приложения", @"Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1); Application.Exit(); return; } //Инициируем начальные параметры CallbackUpdater DataModelsCallbackUpdater.GetInstance().Initialize(); //Загружаем данные в асинхронном режиме PreLoadData(); //Обновляем состояние главного меню MainMenuStateUpdate(); if (string.IsNullOrEmpty(_computerNameCommandLineArg)) { return; } var device = DataModelHelper.FilterRows(DevicesDataModel.GetInstance().Select()) .FirstOrDefault(r => r.Field <string>("Device Name").Contains(_computerNameCommandLineArg)); if (device == null) { return; } var viewport = ViewportFactory.CreateViewport(this, ViewportType.InstallationsViewport); viewport.DynamicFilter = string.Format("[ID Computer] = {0}", device.Field <int>("ID Device")); if (((IMenuController)viewport).CanLoadData()) { ((IMenuController)viewport).LoadData(); } AddViewport(viewport); ChangeMainMenuState(); StatusBarStateUpdate(); ChangeViewportsSelectProprty(); }