private void CourseWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { if (e.Error != null) { MsgBox.Show(e.Error.Message); return; } else if (!errorProvider.HasError && ("" + RunningSchoolYear != cboSchoolYear.Text || "" + RunningSemester != cboSemester.Text)) { RunningSchoolYear = int.Parse(cboSchoolYear.Text); RunningSemester = int.Parse(cboSemester.Text); CourseWorker.RunWorkerAsync(); } else { List <string> subjects = Courses.GetSubjects(); cboSource.Items.Clear(); cboSource.Items.AddRange(subjects.ToArray()); chTargetSubjects.Items.Clear(); chTargetSubjects.Items.AddRange(subjects.ToArray()); ControlEnabled = true; cboExam.Focus(); dgvTargets.ClearSelection(); FISCA.Presentation.MotherForm.SetStatusBarMessage(""); } }
private void cboSchoolYearSemester_TextChanged(object sender, EventArgs e) { ValidateSemester(); if (!errorProvider.HasError) { if (!CourseWorker.IsBusy) { ControlEnabled = false; RunningSchoolYear = int.Parse(cboSchoolYear.Text); RunningSemester = int.Parse(cboSemester.Text); CourseWorker.RunWorkerAsync(); } } }
private void CourseWorker_DoWork(object sender, DoWorkEventArgs e) { CourseWorker.ReportProgress(0, "讀取學生資料..."); Event.WaitOne(); CourseWorker.ReportProgress(100, "讀取學生資料..."); List <string> studentIDs = Students.AsKeyList(); FunctionSpliter <string, JHSCAttendRecord> spliter = new FunctionSpliter <string, JHSCAttendRecord>(100, Util.MaxThread); spliter.Function = delegate(List <string> part) { return(JHSCAttend.Select(part, null, null, "" + RunningSchoolYear, "" + RunningSemester)); }; spliter.ProgressChange = delegate(int progress) { CourseWorker.ReportProgress(Util.CalculatePercentage(studentIDs.Count, progress), "讀取修課記錄..."); }; List <JHSCAttendRecord> AllAttends = spliter.Execute(studentIDs); AttendManager.Instance.Set(Students, AllAttends); List <string> validCourseIDs = new List <string>(); foreach (JHSCAttendRecord sca in AllAttends) { if (!validCourseIDs.Contains(sca.RefCourseID)) { validCourseIDs.Add(sca.RefCourseID); } } //CourseWorker.ReportProgress(0, "讀取課程..."); JHCourse.RemoveAll(); FunctionSpliter <string, JHCourseRecord> spliter2 = new FunctionSpliter <string, JHCourseRecord>(100, Util.MaxThread); spliter2.Function = delegate(List <string> part) { return(JHCourse.SelectByIDs(part)); }; spliter2.ProgressChange = delegate(int progress) { CourseWorker.ReportProgress(Util.CalculatePercentage(validCourseIDs.Count, progress), "讀取課程..."); }; Courses = spliter2.Execute(validCourseIDs); }