Пример #1
0
 private void ProcessThreadedScriptStatus(object runnerObj)
 {
     try
     {
         StatusReportRunner runner = (StatusReportRunner)runnerObj;
         runner.RetrieveStatus();
     }
     finally
     {
         lock (StatusReporting.SyncObj)
         {
             StatusReporting.SyncObj.WorkingRunners--;
         }
     }
 }
Пример #2
0
        public string GetScriptStatus(ref BackgroundWorker bgWorker, string fileName, ReportType reportType)
        {
            foreach (ServerData srv in multiDbData)
            {
                foreach (List <DatabaseOverride> ovr in srv.OverrideSequence.Values)
                {
                    threadTotal++;
                    lock (StatusReporting.SyncObj)
                    {
                        StatusReporting.SyncObj.WorkingRunners++;
                    }
                    StatusReportRunner runner = new StatusReportRunner(this.buildData, srv.ServerName, ovr, projectFilePath);
                    runners.Add(runner);
                    System.Threading.ThreadPool.QueueUserWorkItem(ProcessThreadedScriptStatus, runner);
                }
            }

            int counter = 0;

            while (StatusReporting.SyncObj.WorkingRunners > 0)
            {
                System.Threading.Thread.Sleep(100);
                counter++;

                if (bgWorker != null && (counter % 2 == 0))
                {
                    bgWorker.ReportProgress(StatusReporting.SyncObj.WorkingRunners, String.Format("Threads remaining: {0}", StatusReporting.SyncObj.WorkingRunners.ToString()));
                }
            }

            if (bgWorker != null)
            {
                bgWorker.ReportProgress(0, "Collating Results...");
            }

            ServerStatusDataCollection coll = new ServerStatusDataCollection();

            coll.BuildFileNameFull = this.buildZipFileName;
            foreach (StatusReportRunner runner in this.runners)
            {
                coll[runner.ServerName][runner.BaseDatabase] = runner.Status;
            }
            return(GenerateReport(coll, fileName, reportType));
        }