/// <summary> /// Xảy ra khi công việc hoàn thành /// </summary> /// <param name="Data">Dữ liệu đầu vào</param> private void CallBack(object Data, WorkExcuter.Work work) { DBDataContext db = new DBDataContext(); if (!Directorys.IsFileExited()) { db.BackUpDB(Directorys.GetBackupPath()); } //Thay thế Work đã được thực thi bằng work mới nếu repeat true if (_Repeat) { for (int i = 0; i < 7; i++) { if (Works[i] == work.WorkID) { DateTime NextTime = work.Time.AddDays(7); Works[i] = WorkExcuter.WorksManager.GetNewWork(NextTime, new WorkExcuter.CallBackDlg(CallBack), new WorkExcuter.CallBackDlg(OnNotExcuted), NextTime, false).WorkID; } } } else // Không repeat, chạy xong rồi thì nhờ class thông báo rằng mình đã xong việc { if (AScheduleDone != null) { AScheduleDone(this, new EventArgs()); } } }
/// <summary> /// Chạy khi có 1 Work không được chạy do quá thời gian /// </summary> /// <param name="sender">WorkID</param> /// <param name="e">EventArgs</param> private void OnNotExcuted(object sender, WorkExcuter.Work work) { // Nếu là lặp lại thì set work mới if (_Repeat) { for (int i = 0; i < 7; i++) { if (Works[i] == (int)sender) { int SoNgayDaQua = DateTime.Today.Day - work.Time.Day; DateTime NextTime = work.Time.AddDays(7 - SoNgayDaQua); Works[i] = WorkExcuter.WorksManager.GetNewWork(NextTime, new WorkExcuter.CallBackDlg(CallBack), new WorkExcuter.CallBackDlg(OnNotExcuted), NextTime, false).WorkID; } } } else // Không lặp lại thì thông báo là tác vụ backup đã hoàn thành { if (AScheduleDone != null) { AScheduleDone(this, new EventArgs()); } } }
/// <summary> /// Hủy bỏ tác vụ này /// </summary> public void Terminate() { // Muốn hủy bỏ một tác vụ, đầu tiên ta phải dùng lớp để thông báo là nó đã xong việc if (AScheduleDone != null) { AScheduleDone(this, new EventArgs()); } // sau khi thông báo rồi thì phải terminate tất cả các work bên trong Schedule này if (_Repeat) { foreach (var item in Works) { WorkExcuter.Work work = WorkExcuter.WorksManager.GetWorkByID(item); if (work != null) { work.Terminate(); } } } else { WorkExcuter.WorksManager.GetWorkByID(NoRepeatWork).Terminate(); } }