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));
            }
        }