/// <summary>
        /// Послать Запрос Программно
        /// Необходимо занести значения в параметры
        /// -> они заносятся в таблицу
        /// -> таблица сереализуется в XML (было)
        /// </summary>
        /// <param name="targetWriter"></param>
        /// <param name="inNetCommandForTask"></param>
        private void SendRequestProgrammed(Target targetWriter, NetCommandForTask inNetCommandForTask)
        {
            string procedureName = inNetCommandForTask.ProcedureName;
            var    querytask     = mTasksSendManager.Tasks.Where((task) => task.Value.ProcedureName == procedureName).First().Value;

            if (querytask == null)
            {
                throw new ArgumentNullException($"<{procedureName}> отсутствует в колекции <mTasksSendManager.Tasks> в процедуре <{nameof(SendRequestProgrammed)}>");
            }

            ManagerTaskApplication.TaskApplication taskSend = (ManagerTaskApplication.TaskApplication)(mTasksSendManager.Tasks[querytask.Name].Clone()); // десериализация задачи

            if (targetWriter.IsControlCommadVisible)
            {
                targetWriter.UserControlCommandTarget.SetNothigDataSourceForDataGridSend();
            }

            targetWriter.ConfigSend.Clear();
            targetWriter.ConfigSend.AddRow(COMMAND_NAME, taskSend.Name, TypeParam.String);
            targetWriter.ConfigSend.AddRow(COMMAND_DESCRIPTION, taskSend.Description, TypeParam.String);

            if (!(inNetCommandForTask.Parameters == null))
            {
                if (inNetCommandForTask.Parameters.Length == taskSend.Parameters.Values.Count)
                {
                    // скопировать в itemParameter значение parameters(itemParameter.Number - 1)
                    foreach (var itemParameter in taskSend.Parameters.Values)
                    {
                        targetWriter.ConfigSend.AddRow($"{itemParameter.Number} {COMMAND_PARAMETER}", inNetCommandForTask.Parameters[itemParameter.Number - 1], itemParameter.Type);
                    }
                }
                else
                {
                    MessageBox.Show($"Число переданных параметров для исполнения не соответствует{Environment.NewLine}числу параметров в конфигурационном описании задачи.", $"Процедура <{nameof(SendRequestProgrammed)}>", MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
                    return;
                }
            }

            if (inNetCommandForTask.IsResponse)
            {
                targetWriter.ConfigSend.AddRow(INDEX, inNetCommandForTask.IndexResponse, TypeParam.String);
            }
            else
            {
                //Dim random As Random = RandomProvider.GetThreadRandom()
                //Dim random As Random = New Random(Convert.ToInt32((DateTime.Now.Millisecond >> 32)))
                targetWriter.ConfigSend.AddRow(INDEX, Convert.ToInt32(RandomProvider.GetThreadRandom().NextDouble() * (Math.Pow(2, 31))).ToString(), TypeParam.String);
            }

            targetWriter.ConfigSend.AddRow(COMMAND_COMMANDER_ID, $"Компьютер:<{System.Environment.MachineName}> соединение:<{targetWriter.HostName}> канал:<{targetWriter.NamePiepSend}>", TypeParam.String);

            SendXMLCommand(targetWriter);

            if (targetWriter.IsControlCommadVisible)
            {
                targetWriter.UserControlCommandTarget.UpdateDataGridSend();
            }
        }
        //Private syncPointDoMonitor As Integer = 0 'для синхронизации

        /// <summary>
        /// Отправить команды на все Targets.
        /// Вызыватся из одного обработчика таймера,
        /// если будут вызываться из разных потоков,
        /// то могут мешать друг другу, поэтому следует применять очередь команд в каждом target
        /// </summary>
        /// <remarks></remarks>
        private void SendCommandOutOfQueueFromAllTargets()
        {
            // не стал применять синхронизацию (syncPointDoMonitor), т.к. при выводе окна из родительской формы события таймера теряются
            //<MethodImplAttribute(MethodImplOptions.Synchronized)>

            foreach (Target itemTarget in ManagerAllTargets.ListTargets)
            {
                // '' Должна быть очередь команд для каждого компьютера. Какой-то сервис кладёт туда команду, а здесь происходит извлечение
                // ''--- Тест ---------------------------------------------------------
                //Dim random As Random = New Random(Convert.ToInt32((DateTime.Now.Millisecond >> 32)))
                //itemTarget.CommandWriterQueue.Enqueue(New NetCommandForTask("Clear Polynomial Channel",
                //                                                                  New String() {((random.NextDouble) * 100).ToString,
                //                                                                                "2",
                //                                                                                "3",
                //                                                                                "4",
                //                                                                                "5",
                //                                                                                "6",
                //                                                                                "7"})) 'TODO: где-то занести значение в очередь
                // ''--- Тест ---------------------------------------------------------

                //Dim sync As Integer = Interlocked.CompareExchange(syncPointDoMonitor, 1, 0)
                //If sync = 0 Then
                if (itemTarget.CommandWriterQueue.Count > 0)
                {
                    while (itemTarget.CommandWriterQueue.Count > 0)
                    {
                        NetCommandForTask mNetCommandForTask = itemTarget.CommandWriterQueue.Dequeue();
                        SendRequestProgrammed(itemTarget, mNetCommandForTask);
                        // задача ни чего не дала
                        //Dim tsk As Task = Task.Factory.StartNew(Sub() SendRequestProgrammed(itemTarget, mNetCommandForTask.NameCommand, mNetCommandForTask.Parameters))
                        //tsk.Wait()
                    }
                }
                //syncPointDoMonitor = 0 ' освободить
            }

            //TODO: проверить не пришло ли время очистить буфера команд для target
            //If countTimedEvent > LIM_COUNT_TIMED_EVENT Then
            //    countTimedEvent = 0
            //    For  itemTarget As Target In ManagerAllTargets.ListTargets
            //        SendRequestProgrammed(itemTarget, COMMAND_NOTHING)
            //    Next
            //End If
        }