private void SendPrintJobs(List <PrintJob> jobList) { while (jobList.Count > 0) { PrintJob job = jobList[0]; string callUrl = string.Empty; string fallbackUrl = string.Empty; string omId = string.Empty; if (_outputManagers.ContainsKey(job.WarehouseId)) { callUrl = _outputManagers[job.WarehouseId].Main_Url; fallbackUrl = _outputManagers[job.WarehouseId].Fallback_Url; omId = _outputManagers[job.WarehouseId].OutputManagerId; } else { Tracing.TraceEvent(TraceEventType.Error, 0, String.Format("No Output Manager configured for Warehouse: {0} Job: {1}", job.WarehouseId, job.PrintJobId)); } if (!_jobsPerOMCounter.ContainsKey(omId)) { _jobsPerOMCounter.Add(omId, 0); } if ((_jobsPerOMCounter[omId] < _maxNumOfConcurrentJobs) || _maxNumOfConcurrentJobs == 0) { _jobsPerOMCounter[omId]++; _totalNumOfConcurrentJobs++; PrintJobArguments arguments = new PrintJobArguments(job.PrintJobId, job.ParametersCollection, omId, callUrl, fallbackUrl); System.Threading.ThreadPool.QueueUserWorkItem(SendPrintJobThread, (object)arguments); jobList.RemoveAt(0); } else { System.Threading.Thread.Sleep(1000); } //For debugging without threading //SendPrintJob(printJobId, documentCollection, omId, callUrl, fallbackUrl); } }
private void SendPrintJobThread(object argumentObject) { try { PrintJobArguments argument = (PrintJobArguments)argumentObject; if (argument != null) { double printJobId = argument.printJobId; CreateOutputParametersCollection documentCollection = argument.documentCollection; string omId = argument.omId; string urlMain = argument.urlMain; string fallbackUrl = argument.fallbackUrl; SendPrintJob(printJobId, documentCollection, omId, urlMain, fallbackUrl); } } catch (Exception ex) { Tracing.TraceEvent(TraceEventType.Error, 0, String.Format("Error executing print job thread.\r\n\r\n{0}\r\n\r\n", ex.Message)); } }