//выполнить таск
 void doTask(BatteryTesterTask task)
 {
     if (task.Operation == BatteryTesterTask.Operations.SetData)
     {
         lock (locker)
             port.SendCommand(task.Data);
         if (go.WaitOne(500)) // Ожидаем сигнала начать...
         {
             lock (responce)
             {
                 //test
                 task.check(responce);
             }
             return;
         }
         else
         {
             throw new Exception("Set Request error");
         }
     }
 }
        //запуск в своем потоке
        //постоянный опрос параметоров
        private void kollector()
        {
            const int MaxLink = 5;
            int       link    = MaxLink;
            int       chanN   = 0;

            LinkState = false;
            addLog("Коллектор открыт ");
            try
            {
                while (isListening)
                {
                    try
                    {
                        getChannelData(chanN);
                        chanN++;
                        chanN %= 8;
                        if (chanN == 0)
                        {
                            //getTemp();
                            //getRef();
                            wh.WaitOne(1000);
                        }
                        if (LinkState == false)
                        {
                            LinkState = true;
                            addLog("Link enabled");
                        }
                        link = MaxLink;
                    }
                    catch (Exception)
                    {
                        if (link != 0)
                        {
                            if (--link == 0)
                            {
                                LinkState = false;
                                addLog("NoLink");
                                break;
                                //linkLabel.Dispatcher.BeginInvoke((Action)(() => { linkLabel.Foreground = Brushes.Red; }));
                            }
                        }
                    }
                    BatteryTesterTask task = null;

                    lock (locker)
                    {
                        if (tasks.Count > 0)
                        {
                            task = tasks.Dequeue();
                            if (task == null)
                            {
                                break;
                            }
                        }
                    }
                    try
                    {
                        if (task != null)
                        {
                            doTask(task);
                            //string resp = getCotekData(task);
                            //if (resp != null) addLog(task + resp + " OK");
                            //else addLog(task + "ERROR!!!");
                        }
                        else
                        {
//                            wh.WaitOne(1000);
                        }
                    }
                    catch (Exception e)
                    {
                        addLog(e.Message);
                    }
                }
                addLog("Коллектор закрыт ");
            }
            catch (Exception e)
            {
                // receivingUdpClient.Close();
                //linkLabel.Dispatcher.BeginInvoke((Action)(() => { linkLabel.Foreground = Brushes.Black; }));
                addLog(e.Message + "Коллектор закрыт ");
            }
        }
 public void EnqueueTask(BatteryTesterTask task)
 {
     lock (locker)
         tasks.Enqueue(task);
     wh.Set();
 }