public void start() { ApplicationLog.WriteDataLog("Service Started" + DateTime.Now + "_" + DateTime.Now.DayOfWeek); #region startTry try { #region using using (AttendanceTrackingDBDataContext db = new AttendanceTrackingDBDataContext()) { int threadIndex = 0, callNumIndex = 0, callCnt, sectCnt = 0; // UpdateGradebook[] upGb = { new UpdateGradebook(), new UpdateGradebook(), new UpdateGradebook(), new UpdateGradebook() }; UpdateGradebook upGb = new UpdateGradebook(); string day = ""; //DateTime morningStartTime = Convert.ToDateTime("14:10"); //DateTime eveningStartTime = Convert.ToDateTime("20:00"); if (DateTime.Now.DayOfWeek.ToString().ToLower() == "thursday") { day = "R"; } else { day = DateTime.Now.DayOfWeek.ToString()[0].ToString(); } var d = DateTime.Now.Hour; var courseCallNumbers = from sec in db.sections where sec.days.Contains(day) //&& sec.end.Value <= TimeSpan.FromHours(DateTime.Now.Hour) select new { sec.call_number, sec.course_name }; var courseCallNumbers2 = from sec in db.sections where sec.days.Contains(day) //&& sec.end.Value <= TimeSpan.FromHours(DateTime.Now.Hour) select sec; //var test1 = TimeSpan.FromHours(DateTime.Now.Hour); #region Evening //if (DateTime.Now > morningStartTime) //{ // courseCallNumbers = from sec in db.sections // //where sec.days.Contains(day) // //&& sec.end.Value <= TimeSpan.FromHours(DateTime.Now.Hour) // //&& sec.end.Value >= TimeSpan.FromHours(morningStartTime.Hour) // select new { sec.call_number, sec.course_name }; // var hour = from sec in db.sections // //where sec.days.Contains(day) // select new { sec.end }; // courseCallNumbers2 = from sec in db.sections // //where sec.days.Contains(day) // //&& sec.end.Value <= TimeSpan.FromHours(DateTime.Now.Hour) // //&& sec.end.Value >= TimeSpan.FromHours(morningStartTime.Hour) // select sec; //} #endregion callCnt = courseCallNumbers2.Count(); ApplicationLog.WriteDataLog("Total number of courses updating now:" + callCnt); if (callCnt != 0) { sectCnt = callCnt / maxThreads; string[][] callNumbers = new string[maxThreads][]; callNumbers[0] = new string[sectCnt]; int count = 0; foreach (var callNumb in courseCallNumbers) { callNumbers[threadIndex][callNumIndex] = callNumb.call_number; count++; upGb.callNumbers = callNumbers[threadIndex]; upGb.callNumbersCount = sectCnt + 1; //if call numbers array row per thread is filled up and ready to run. //if (callNumIndex >= sectCnt) //{ // upGb[threadIndex].callNumbers = callNumbers[threadIndex]; // upGb[threadIndex].callNumbersCount = sectCnt + 1; // threadIndex++; // if (threadIndex != maxThreads) // { // sectCnt = (callCnt - count) / (maxThreads - threadIndex); // //to check number of columns required // if ((callCnt - count) % (maxThreads - threadIndex) == 0) // { // callNumbers[threadIndex] = new string[sectCnt]; // sectCnt = sectCnt - 1; // } // else // { // callNumbers[threadIndex] = new string[sectCnt + 1]; // } // } // callNumIndex = 0; //} //else callNumIndex++; } ApplicationLog.WriteDataLog("Updating Gradebook for courses started" + DateTime.Now + "_" + DateTime.Now.DayOfWeek); try { Parallel.Invoke(() => upGb.UpdateCourses() //, () => upGb[1].UpdateCourses1() //, () => upGb[2].UpdateCourses2() //, () => upGb[3].UpdateCourses3() ); } catch (Exception ex) { ApplicationLog.WriteDataLog("Parallel Exception:" + ex.Message + "_" + DateTime.Now + "_" + DateTime.Now.DayOfWeek); } ApplicationLog.WriteDataLog("Gradebook updated successfully at:" + DateTime.Now + "_" + DateTime.Now.DayOfWeek); } else { ApplicationLog.WriteDataLog("There are no courses to update at:" + DateTime.Now + "_" + DateTime.Now.DayOfWeek); } } #endregion //using this.OnStop(); } #endregion //startTry catch (Exception e) { //writing exception information to log file ApplicationLog.WriteDataLog("Exception:" + e.Message + "_" + DateTime.Now + "_" + DateTime.Now.DayOfWeek); //stops the service in case of any exception this.OnStop(); } }