protected void ManageProgress(BindingSource bindingSource, DoubleBufferedDataGridView grid, FrameType frameType, int sleepTimer) { var progress = new Progress(); progress.SetupAndShow(caller, 0, 0, false, true, waitHandle); progressSearched = 0; progressFound = 0; UpdateGridDelegate gridUpdater = UpdateGrid; var updateParams = new object[] { bindingSource }; ResortGridDelegate gridSorter = ResortGrid; var sortParams = new object[] { bindingSource, grid, frameType }; SetButtonDelegate setButton = SetGenerateButton; try { bool alive = true; while (alive) { progress.ShowProgress(progressSearched / (float)progressTotal, progressSearched, progressFound); if (refreshQueue) { caller.Invoke(gridUpdater, updateParams); refreshQueue = false; } if (jobs != null) { foreach (Thread job in jobs) { if (job != null && job.IsAlive) { alive = true; break; } alive = false; } } if (sleepTimer > 0) { Thread.Sleep(sleepTimer); } } } catch (ObjectDisposedException) { // This keeps the program from crashing when the Time Finder progress box // is closed from the Windows taskbar. } catch (Exception exception) { if (exception.Message != "Operation Cancelled") { throw; } } finally { progress.Finish(); if (jobs != null) { foreach (Thread t in jobs) { if (t != null) { t.Abort(); } } } caller.Invoke(setButton, true); caller.Invoke(gridSorter, sortParams); } }
// Executa Fluxo potencia void Worker_ExecutaFluxo() { // _inicio = DateTime.Now; //Mensagem de Início ExibeMsgDisplayMW("Início"); //Lê os alimentadores e armazena a lista de alimentadores List <string> alimentadores = CemigFeeders.GetTodos(_parGUI.GetArqLstAlimentadores()); // carrega dados de medicoes _medAlim.CarregaDados(); // instancia classe ExecutaFluxo RunPowerFlow executaFluxoObj = new RunPowerFlow(this, _paramGerais); switch (_parGUI._tipoFluxo) { //Executa o Fluxo Snap case "Snap": executaFluxoObj.ExecutaSnap(alimentadores); break; //Executa o fluxo diário case "Daily": executaFluxoObj.ExecutaDiario(alimentadores); break; //Executa o fluxo diário case "Hourly": executaFluxoObj.ExecutaDiario(alimentadores); break; //Executa o fluxo mensal case "Monthly": executaFluxoObj.ExecutaMensal(alimentadores); break; //Executa o fluxo mensal case "Yearly": executaFluxoObj.ExecutaAnual(alimentadores); break; default: break; } //Finalização do processo FinalizaProcesso(false); //Reabilita a interface. //Como a interface está em outro processo, é necessário utilizar um Dispatcher SetButtonDelegate setar = new SetButtonDelegate(SetButton); _ebDispatcher.BeginInvoke(setar); }