//запуск всех задач и автообновление списка из БД public WorkerErrorLevel StartAutoRefresh() { GetOverdueInDB(DateTime.Now); //запуск задач WorkerErrorLevel wol = StartTasks(); if (wol == WorkerErrorLevel.Error) { return(wol); } //получение текущего дня CurrentDate = GetCurrentDate(); //запуск таймера if (WorkerTimer == null) { WorkerTimer = new Timer(); } WorkerTimer.AutoReset = true; WorkerTimer.Interval = 10000; WorkerTimer.Elapsed += new ElapsedEventHandler(WorkerTimer_Elapsed); WorkerTimer.Start(); return(WorkerErrorLevel.OK); }
void Worker_OnOverdueTaskDetected(object sender) { string correctMsg = "Для просроченных задач установлено новое время" + " выполнения. Однократно выполняемые задачи деактивированы"; string runMsg = "Выполнение просроченных задач завершено"; if (Convert.ToBoolean(cConfig.GetParameter("Global.OverdueNotify", "true"))) { niMain.ShowBalloonTip(5000, "Просроченные задания", "Обнаружены просроченные задания", ToolTipIcon.Warning); } if (Convert.ToBoolean(cConfig.GetParameter("Global.OverdueRun", "false"))) { WorkerErrorLevel wol = Worker.RunOverdueTasks(); showworkererror(wol, runMsg); } if (Convert.ToBoolean(cConfig.GetParameter("Global.OverdueNewTime", "false"))) { WorkerErrorLevel wol = Worker.CorrectOverdueTime(DateTime.Now); showworkererror(wol, correctMsg); if (wol == WorkerErrorLevel.OK) { niMain.ShowBalloonTip(5000, "Просроченные задания", correctMsg, ToolTipIcon.Info); } } }
private void mnuTasksStartAll_Click(object sender, EventArgs e) { WorkerErrorLevel wol = Worker.StartAutoRefresh(); if (wol != WorkerErrorLevel.OK) { CommonFunctions.ErrMessage(Worker.TaskErrMessage); statlblMessages.ForeColor = Color.Red; statlblMessages.Text = Worker.TaskErrMessage; } else { if (Worker.TaskErrMessage == string.Empty) { statlblMessages.ForeColor = Color.Black; statlblMessages.Text = "Задачи запущены. " + "Задач " + Worker.LoadedTasksCount(); } else { statlblMessages.ForeColor = Color.Crimson; statlblMessages.Text = Worker.TaskErrMessage; } mnuTasksStartAll.Enabled = false; mnuTasksStopAll.Enabled = true; mnuTasksRestart.Enabled = true; } }
void WorkerTimer_Elapsed(object sender, ElapsedEventArgs e) { string date = GetCurrentDate(); if (CurrentDate != date) //наступил следующий день, обновляем список задач { WorkerTimer.Stop(); //остановка таймера, чтоб событие не вызвалось WorkerErrorLevel wol = RefreshTasks(); if (wol == WorkerErrorLevel.Error) { if (OnAutoRefreshError != null) { OnAutoRefreshError(this); } return; } CurrentDate = date; WorkerTimer.Start(); if (OnAutorefreshComplete != null) { OnAutorefreshComplete(this); } } }
private void mnuEditDelete_Click(object sender, EventArgs e) { if (grdMain.CurrentRow == null) { return; } int RecID = (int)grdMain.CurrentRow.Cells["ID"].Value; //проверка, не заблокирована ли запись if (LockedRecIDs.Contains(RecID)) { CommonFunctions.InfoMessage("Запись заблокирована, так как данное задание выполняется", "Запись заблокирована"); return; } DataRow dr = cConfig.dsConfig.Tables["Tasks"].Rows.Find(RecID); DialogResult Ans = MessageBox.Show("Окончательно удалить задачу " + dr["Name"].ToString() + "?\r\nОтменить будет невозможно!", "Удаление задачи", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation); if (Ans == DialogResult.No) { return; } //определение, удаляется ли последняя строка в гриде bool LastRow = false; int gridy = grdMain.CurrentCellAddress.Y; int gridx = grdMain.CurrentCellAddress.X; if (gridy == (grdMain.Rows.Count - 1)) { LastRow = true; } //удаление задачи cConfig.dsConfig.Tables["Tasks"].Rows.Remove(dr); //выгружаем из списка запущенных, если есть WorkerErrorLevel wol = Worker.RemoveTask(RecID, false); showworkererror(wol, "Задача удалена"); if (!cConfig.SaveConfig()) { CommonFunctions.ErrMessage(cConfig.ConfigErrMessage); } FindRows = null; if (LastRow) { if (grdMain.Rows.Count > 0) { grdMain.Rows[grdMain.Rows.Count - 1].Cells[gridx].Selected = true; } } }
public WorkerErrorLevel RefreshTasks() { WorkerErrorLevel wol = StopTasks(); if (wol != WorkerErrorLevel.OK) { return(wol); } return(StartTasks()); }
private void mnuEditEdit_Click(object sender, EventArgs e) { if (grdMain.CurrentRow == null) { return; } //Подготовка данных для редактирования int RecID = (int)grdMain.CurrentRow.Cells["ID"].Value; cTask Task = null; //проверка, не заблокирована ли запись if (LockedRecIDs.Contains(RecID)) { CommonFunctions.InfoMessage("Запись заблокирована, так как данное задание выполняется", "Запись заблокирована"); return; } try { Task = new cTask(cConfig.dsConfig, "Tasks", RecID); } catch (Exception ex) { CommonFunctions.ErrMessage(ex.Message); statlblMessages.ForeColor = Color.Red; statlblMessages.Text = "ОШИБКА: " + ex.Message; return; } //форма редактирования frmAddTask fAddTask = new frmAddTask(); fAddTask.fMain = this; fAddTask.Task = Task; fAddTask.bEdit = true; fAddTask.ShowDialog(); OnLockRecord = null; OnUnlockRecord = null; if (fAddTask.bSuccess) { FindRows = null; //обнуление поиска //отредактированное задание должно быть в очереди на выполнение if (Worker.RunningInCurrentPeriod(RecID)) { Worker.RemoveTask(RecID, false); //удаляем WorkerErrorLevel wol = Worker.AddTask(RecID); //перезапускаем showworkererror(wol, "Задача сохранена и запущена на выполнение."); } } }
void Worker_OnAutoRefreshError(object sender) { cTaskWorker w = (cTaskWorker)sender; CommonFunctions.ErrMessage(w.TaskErrMessage); WorkerErrorLevel wol = w.StopAutoRefresh(); if (wol != WorkerErrorLevel.OK) { CommonFunctions.ErrMessage(w.TaskErrMessage); } }
public WorkerErrorLevel StopAutoRefresh() { WorkerErrorLevel wol = StopTasks(); if (wol != WorkerErrorLevel.OK) { return(wol); } if (WorkerTimer != null) { WorkerTimer.Stop(); WorkerTimer.Elapsed -= WorkerTimer_Elapsed; WorkerTimer.Dispose(); WorkerTimer = null; } return(WorkerErrorLevel.OK); }
private void mnuTasksStopAll_Click(object sender, EventArgs e) { if (Worker.TasksLoaded()) { DialogResult Ask = MessageBox.Show("Имеются загруженные задачи. Остановить все?", "Остановка задач", MessageBoxButtons.YesNo, MessageBoxIcon.Question); if (Ask == DialogResult.No) { return; } } WorkerErrorLevel wol = Worker.StopAutoRefresh(); showworkererror(wol, "Задачи остановлены"); mnuTasksStartAll.Enabled = true; mnuTasksStopAll.Enabled = false; mnuTasksRestart.Enabled = false; }
//загрузка и запуск заданий на текущий день public WorkerErrorLevel StartTasks() { WorkerErrorLevel wol = LoadTasks(); if (wol != WorkerErrorLevel.OK) { return(wol); } foreach (cTask tsk in CurrentTasks.Values) { //запуск задач tsk.onCompleteTask += new cTask.CompleteTask(cTaskWorker_onCompleteTask); tsk.onSendMessage += new cTask.SendTaskMessage(cTaskWorker_onSendMessage); tsk.onStartRunningTask += new cTask.StartRunnigTask(tsk_onStartRunningTask); tsk.onTaskStop += new cTask.TaskStop(tsk_onTaskStop); //если только всплывающие сообщения if (WorkerNotification == NotificationType.Baloon) { tsk.NoRemind = true; //отключить постоянные напоминания } else { tsk.NoRemind = false; } try { tsk.StartWatch(); MessageForms.Add(tsk.ID, null); } catch (Exception ex) { TaskErrMessage = ex.Message; return(WorkerErrorLevel.Error); } } return(WorkerErrorLevel.OK); }
private void mnuEditAdd_Click(object sender, EventArgs e) { //показали форму для добавления frmAddTask fAddTask = new frmAddTask(); fAddTask.ShowDialog(); if (fAddTask.bSuccess) //добавление удачно { FindRows = null; //обнуляем поиск //попытка запуска новой задачи //вытаскиваем ID последней записи int RecID = (int)cConfig.dsConfig.Tables["Tasks"]. Rows[cConfig.dsConfig.Tables["Tasks"].Rows.Count - 1]["ID"]; //Пробуем загрузить WorkerErrorLevel wol = Worker.AddTask(RecID); showworkererror(wol, "Задача сохранена и запущена на выполнение."); } }
private void mnuFileOptions_Click(object sender, EventArgs e) { frmOptions fOptions = new frmOptions(); fOptions.ShowDialog(); if (fOptions.bSuccess) { if (fOptions.NotificationChanged) { WorkerErrorLevel wol = Worker.StopAutoRefresh(); showworkererror(wol, "Задачи остановлены"); mnuTasksStartAll.Enabled = true; mnuTasksStopAll.Enabled = false; mnuTasksRestart.Enabled = false; if (!Worker.TasksLoaded()) { mnuTasksStartAll_Click(null, null); } } cConfig.SaveConfig(); } }
void showworkererror(WorkerErrorLevel wol, string oktext) { switch (wol) { case WorkerErrorLevel.Error: { statlblMessages.ForeColor = Color.Red; statlblMessages.Text = Worker.TaskErrMessage; CommonFunctions.ErrMessage(Worker.TaskErrMessage); }; break; case WorkerErrorLevel.Warning: { statlblMessages.ForeColor = Color.Crimson; statlblMessages.Text = Worker.TaskErrMessage; }; break; default: { statlblMessages.ForeColor = Color.Black; statlblMessages.Text = oktext; }; break; } }
private void frmMain_FormClosing(object sender, FormClosingEventArgs e) { if (!ExitFromMenu) //пользователь закрыл форму крестиком, а не вышел из меню { if (Convert.ToBoolean(cConfig.GetParameter("Global.AskMainBehavior", "true"))) { //спросить о поведении формы frmMainBeh fMainBeh = new frmMainBeh(); DialogResult Ask = fMainBeh.ShowDialog(); if (Ask == DialogResult.No) { e.Cancel = true; return; } } //проверить что делать FormBehavior MainBehavior = (FormBehavior)Convert.ToInt32( cConfig.GetParameter("Global.MainBehavior", "0")); if (MainBehavior == FormBehavior.Hide) //скрыть форму { this.Hide(); e.Cancel = true; } } bool Maximized = false; //если форма минимизирована перед закрытием //не сохранять параметры окна if (this.WindowState == FormWindowState.Minimized) { return; } if (this.WindowState == FormWindowState.Maximized) { Maximized = true; } cConfig.SetParameter("Main.Maximized", Maximized.ToString()); cConfig.SetParameter("Main.Width", this.Width.ToString()); cConfig.SetParameter("Main.Height", this.Height.ToString()); //закрытие не отменено - останавливаем задачи if (!e.Cancel) { WorkerErrorLevel wol = Worker.StopAutoRefresh(); if (wol != WorkerErrorLevel.OK) { CommonFunctions.ErrMessage(Worker.TaskErrMessage); } //LockedRecIDs.Clear(); //LockedRecIDs = null; } if (!cConfig.SaveConfig()) { CommonFunctions.ErrMessage(cConfig.ConfigErrMessage); } }
private void mnuEditActivate_Click(object sender, EventArgs e) { if (grdMain.CurrentRow == null) { return; } int RecID = (int)grdMain.CurrentRow.Cells["ID"].Value; //проверка, не заблокирована ли запись if (LockedRecIDs.Contains(RecID)) { CommonFunctions.InfoMessage("Запись заблокирована, так как данное задание выполняется", "Запись заблокирована"); return; } DataRow dr = cConfig.dsConfig.Tables["Tasks"].Rows.Find(RecID); bool Active = (bool)dr["Active"]; bool stopped = false; grdMain_SelectionChanged(null, null); //есть ли задача в списке на выполнение if (Worker.IsTaskExist(RecID)) { //есть, значит активна, надо остановить и удалить из списка WorkerErrorLevel wol = Worker.RemoveTask(RecID, false); showworkererror(wol, "Задача остановлена"); if (wol != WorkerErrorLevel.OK) { return; } Active = false; stopped = true; } else //в списке нет { //меняем активность на противоположную Active = !Active; } //сохранение в БД dr["Active"] = Active; bool scfg = cConfig.SaveConfig(); if (!scfg) { CommonFunctions.ErrMessage(cConfig.ConfigErrMessage); return; } if (Active) //если была активирована { if (Worker.RunningInCurrentPeriod(RecID)) //должна ли выполняться { //надо добавить в список и запустить WorkerErrorLevel wol = Worker.AddTask(RecID); showworkererror(wol, "Задача активирована и запущена"); } else { statlblMessages.ForeColor = Color.Black; statlblMessages.Text = "Задача активирована."; } } else { if (stopped) { statlblMessages.ForeColor = Color.Black; statlblMessages.Text = "Задача остановлена и деактивирована."; } else { statlblMessages.ForeColor = Color.Black; statlblMessages.Text = "Задача деактивирована."; } } }