public DataDBJobs(string dbConnectionString, bool captureJob, string[] siteBusy, string ip)
        {
            this._dbConnectionString = dbConnectionString;

            if (true)//GetTuning()) // данному парсеру разрешена работа?
            {
                if (captureJob) // нужно захватывать задание (т.е. создан стартером)
                {
                    string[][] jobs_ = GetJobs(siteBusy); //берем данные из строки ParsersJob
                    Array.Resize(ref jobs, jobs_.Count());
                    for (int i = 0; i < jobs_.Count(); i++)
                    {
                        string[] job = jobs_[i];
                        Array.Resize(ref job,job.Count()+1);
                        job[job.Count()-1]=ip;
                        jobs[i] = new DataDBJob(dbConnectionString, i + siteBusy.Count(), job);
                    }
                }
            }
        }
        private void _timer_Starter_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            _timerStarter.Stop();
            int streamNumber = GetFreeStream();
            if (streamNumber >= 0)
            {
                try
                {
                    // проверка связи с БД и соответствующая отметка
                    //if (CheckDBConnection("SPM таймер запуска стартовал. ", streamNumber, false))
                    {
                        DataDBJob job = null;
                        try
                        {
                                // считаем задание и попытаемя его запустить
                                lock (_siteBusy)
                                {
                                    lock (newjoblockstring)
                                    {
                                        job = new DataDBJob(_dbConnectionString, streamNumber, true, _siteBusy);
                                        if (job != null)
                                        {
                                            if (!String.IsNullOrEmpty(job.Site))
                                            {
                                                if (!string.IsNullOrEmpty(job.Site)) // задание захвачено
                                                {
                                                    _siteBusy[streamNumber] = job.Site; // сайт занят
                                                    lock (_siteBusyStart)
                                                        _siteBusyStart[streamNumber] = DateTime.Now;
                                                }
                                            }
                                            else
                                            {
                                                _timerStarter.Interval = 15000;
                                                Console.WriteLine(DateTime.Now+" no work");
                                            }
                                        }   
                                        else
                                        {
                                            _timerStarter.Interval = 15000;
                                            Console.WriteLine(DateTime.Now+" no work");
                                        }
                                    }
                                }
                                    if (!String.IsNullOrEmpty(job.Site))
                                    {
                                        Console.WriteLine(DateTime.Now + " On " + streamNumber + " stream started job " + job.Site);
                                        //ShowInfoMessage();
                                        _timerStarter.Interval = 1;
                                        //_timerStarter.Start();
                                        _timerStarter.Enabled=true;
                                        job.StartJob();
                                    }

                        }
                        catch (Exception ex) // ловим ошибку плагина
                        {
                            DataDBService ddbs = new DataDBService();
                            lock (_siteBusy)
                            ddbs.WriteErrorMessage(_dbConnectionString, streamNumber, "Сайт " + _siteBusy[streamNumber] + ". Необработанная ошибка плагина", ex.Message);
                            ddbs.Dispose();
                            GC.SuppressFinalize(ddbs);
                        }
                        finally
                        {
                            if (job != null)
                            {
                                lock (_siteBusy)
                                {
                                    if (!string.IsNullOrEmpty(_siteBusy[streamNumber]))
                                    {
                                        Console.WriteLine(DateTime.Now + " On " + streamNumber + " stream finished job " + job.Site);
                                        _siteBusy[streamNumber] = ""; // сайт свободен
                                        _siteBusyStart[streamNumber] = DateTime.MaxValue;
                                        _timerStarter.Interval = 1;
                                        //_timerStarter.Start();
                                        //ShowInfoMessage();
                                    }
                                    else
                                        _timerStarter.Interval = 15000;
                                }
                                { job.Dispose(); GC.SuppressFinalize(job); }
                            }
                                _timerStarter.Start();
                            //CheckDBConnection("SPM таймер запуска остановлен. ", streamNumber, false);
                        }
                    }
                }
                catch (Exception ex) // ловим ошибку соединения с БД
                {
                    Console.WriteLine("Ошибка 5675 "+ex.Message);
                }
                finally
                {
                    lock (_siteBusy)
                        _siteBusy[streamNumber] = ""; // сайт свободен
                }
            }
            else
            {
                _timerStarter.Interval = 15000;
                _timerStarter.Start();
                Console.WriteLine(DateTime.Now + " No free threads");
            }
        }
        public void OnStop()
        {
            //Останавливаем таймер Starter
            if(this._timerStarter!=null)
                this._timerStarter.Stop();
            //Останавливаем таймер Scheduler
            if(this._timerScheduler!=null)
                this._timerScheduler.Stop();

            // активность: выключение
            DataDBService ddbs = new DataDBService();
            ddbs.WriteMessageAboutActivity(_dbConnectionString, 10001, "SPM остановлен.");
            ddbs.Dispose();
            GC.SuppressFinalize(ddbs);

            // незаконченные задания - сброс состояния "занято"

            DataDBJob job = new DataDBJob(_dbConnectionString, 10002, false, new string[20]);
            job.JobToNoBusy();
            job.Dispose();
            GC.SuppressFinalize(job);
        }
        private void _timer_Scheduler_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            if (!_startTimerScheduler) // в один поток
            {
                if (CheckDBConnection("SPM таймер запуска стартовал. ", 10002, false))
                {
                    _startTimerScheduler = true;
                    this._timerScheduler.Stop();

                    try
                    {
                        DataDBJob job = new DataDBJob(_dbConnectionString, 10002, false, new string[15]);
                        job.JobSchedule();
                    }
                    catch (Exception ex) // ловим ошибку соединения с БД
                    {
                        DataDBService ddbs = new DataDBService();
                        ddbs.WriteMessageAboutActivity(_dbConnectionString, 0, ex.Message);
                        ddbs.Dispose();
                        GC.SuppressFinalize(ddbs);
                    }
                    
                    this._timerScheduler.Start();
                    _startTimerScheduler = false;
                }
            }
        }