void mWorker_PackageWorker(object sender, PackageWorkEventArgs <StudentRecord> e) { List <string> list = new List <string>(); foreach (StudentRecord var in e.List) { list.Add(var.StudentID); } Dictionary <string, SmartSchool.Feature.Student.StudentSnapShop> sv = new Dictionary <string, SmartSchool.Feature.Student.StudentSnapShop>(); foreach (SmartSchool.Feature.Student.StudentSnapShop s in SmartSchool.Feature.Student.StudentSnapShop.GetSnapShop(list.ToArray())) { if (!sv.ContainsKey(s.RefStudentID)) { sv.Add(s.RefStudentID, s); } else { if (sv[s.RefStudentID].Version < s.Version) { sv[s.RefStudentID] = s; } } } List <SmartSchool.Feature.Student.StudentSnapShop> slist = new List <SmartSchool.Feature.Student.StudentSnapShop>(); slist.AddRange(sv.Values); e.Result = slist; }
void multiThreadWorker_PackageWorker(object sender, PackageWorkEventArgs <StudentRecord> e) { int schoolyear = (int)((object[])e.Argument)[0]; int semester = (int)((object[])e.Argument)[1]; AccessHelper helper = (AccessHelper)((object[])e.Argument)[2]; helper.StudentHelper.FillAttendCourse(schoolyear, semester, e.List); }
/// <summary> /// 執行 /// </summary> /// <param name="list">要處理的資料</param> /// <param name="argument">額外的參數</param> public List <PackageWorkEventArgs <T> > Run(IEnumerable <T> list, object argument) { #region 切封包執行 List <PackageWorkEventArgs <T> >[] packages = new List <PackageWorkEventArgs <T> > [_MaxThreads]; for (int i = 0; i < packages.Length; i++) { packages[i] = new List <PackageWorkEventArgs <T> >(); } List <T> package = null; int packagecount = 0; int p = 0; foreach (T var in list) { if (packagecount == 0) { package = new List <T>(_PackageSize); packagecount = _PackageSize; PackageWorkEventArgs <T> pw = new PackageWorkEventArgs <T>(); pw.List = package; pw.Argument = argument; packages[p % _MaxThreads].Add(pw); p++; } package.Add(var); packagecount--; } #region 開多個執行緒跑 List <Thread> otherThreads = new List <Thread>(); for (int i = 1; i < _MaxThreads; i++) { if (packages[i].Count > 0) { Thread backThread = new Thread(new ParameterizedThreadStart(doWork)); backThread.IsBackground = true; backThread.Start(packages[i]); otherThreads.Add(backThread); } } if (packages[0].Count > 0) { doWork(packages[0]); } foreach (Thread thread in otherThreads) { thread.Join(); } #endregion List <PackageWorkEventArgs <T> > result = new List <PackageWorkEventArgs <T> >(); foreach (List <PackageWorkEventArgs <T> > var in packages) { result.AddRange(var); } return(result); #endregion }
void multiThreadUpdater_PackageWorker(object sender, PackageWorkEventArgs <DSRequest> e) { DSXmlHelper helper = new DSXmlHelper("UpdateStudentList"); foreach (DSRequest request in e.List) { foreach (XmlElement ele in request.GetContent().GetElements("Student")) { helper.AddElement(".", ele); } } SmartSchool.Feature.EditStudent.Update(new DSRequest(helper)); }
private void Worker_PackageWorker(object sender, PackageWorkEventArgs <IN> e) { if (Function == null) { throw new ArgumentException("請指定 RunPart 屬性。"); } List <OUT> result = Function(e.List); lock (Result) { progress += e.List.Count; Result.AddRange(result); } if (ProgressChange != null) { ProgressChange(progress); } }
void mWorker_PackageWorker(object sender, PackageWorkEventArgs <SmartSchool.Feature.Student.StudentSnapShop> e) { SmartSchool.Feature.Student.StudentSnapShop.AddSnapShop(e.List.ToArray()); }
void courseLoader_PackageWorker(object sender, PackageWorkEventArgs<StudentRecord> e) { accessHelper.StudentHelper.FillAttendCourse(SmartSchool.Customization.Data.SystemInformation.SchoolYear, SmartSchool.Customization.Data.SystemInformation.Semester, e.List);//抓當學年度學期 List<CourseRecord> courseRecs = (List<CourseRecord>)e.Argument; //整理每個學生的修課至courseRecs foreach (StudentRecord studentRec in e.List) { foreach (StudentAttendCourseRecord attendRec in studentRec.AttendCourseList) { CourseRecord courseRec = accessHelper.CourseHelper.GetCourse("" + attendRec.CourseID)[0]; lock (courseRec) { if (!courseRecs.Contains(courseRec)) courseRecs.Add(courseRec); } } } }
void examLoader_PackageWorker(object sender, PackageWorkEventArgs<CourseRecord> e) { accessHelper.CourseHelper.FillExam(e.List); }