/// <summary>
        /// Запуск метода содержащегося в атрибутах RuningTask
        /// </summary>
        /// <param name="inReader"></param>
        private void RunTask(Target inReader)
        {
            // Получить Type и MethodInfo
            // Diagnostics.Process.GetCurrentProcess.ProcessName дает в среде строку "Registration.vshost"
            // надо очистить
            //Dim MyType As Type = Type.GetType(Diagnostics.Process.GetCurrentProcess.ProcessName & "." & RuningTask.WhatModule) '("Registration.frmMain")
            try
            {
                //Dim processName As String = Process.GetCurrentProcess.ProcessName
                //processName = Left(processName, If(InStr(1, processName, ".") = 0, Len(processName), InStr(1, processName, ".") - 1))
                //Dim MyType As Type = Type.GetType($"{processName}.{RuningTask.WhatModule}") '("Registration.frmMain") "Registration.FormSnapshotViewingDiagram"
                //Dim Mymethodinfo As MethodInfo = MyType.GetMethod(RuningTask.ProcedureName)

                //'RegistrationEventLog.EventLog_AUDIT_SUCCESS("RunTask " & RuningTask.ProcedureName)
                //'Dim parameters As Object() = {True, Модуль1.enuЗапросы.enuПоставитьМеткуКТ, "Пример"} 'ConfigReceive.GetValue(conПараметр)(0)}

                //If RuningTask.Parameters.Values.Count > 0 Then
                //    Dim parameters(RuningTask.Parameters.Values.Count - 1) As Object

                //    For Each itemParameter As TasksReceiveManager.TaskApplication.Parameter In RuningTask.Parameters.Values
                //        parameters(itemParameter.Number - 1) = Convert.ChangeType(itemParameter.Value, Type.GetType("System." & itemParameter.Type))
                //    Next

                //    Mymethodinfo.Invoke(mParentForm, parameters)
                //Else
                //    Mymethodinfo.Invoke(mParentForm, Nothing)
                //End If

                string hostName      = inReader.HostName;
                string indexResponse = inReader.ConfigReceive.GetRowValue(INDEX)[0];
                ManagerTaskApplication.TaskApplication runingTask = inReader.ConfigReceive.GetTask(); // десериализация задачи с реальными параметрами
                Type       myType2       = mParentForm.GetType();
                MethodInfo myMethodinfo2 = myType2.GetMethod(runingTask.ProcedureName);

                if (runingTask.Parameters.Values.Count > 0)
                {
                    object[] parameters = new object[runingTask.Parameters.Values.Count + 1];

                    foreach (ManagerTaskApplication.TaskApplication.Parameter itemParameter in runingTask.Parameters.Values)
                    {
                        parameters[itemParameter.Number - 1] = Convert.ChangeType(itemParameter.Value, Type.GetType("System." + itemParameter.Type.ToString()));
                    }

                    parameters[runingTask.Parameters.Values.Count] = new string[] { hostName, indexResponse };
                    myMethodinfo2.Invoke(mParentForm, parameters);
                }
                else
                {
                    //Dim parameters As Object() = {inReader.HostName}
                    myMethodinfo2.Invoke(mParentForm, new[] { new string[] { hostName, indexResponse } });
                }
            }
            catch (Exception ex)
            {
                string caption = $"Процедура <{nameof(RunTask)}>";
                string text    = ex.ToString();
                MessageBox.Show(text, caption, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                //RegistrationEventLog.EventLog_MSG_EXCEPTION($"<{CAPTION}> {text}")
            }
        }
        /// <summary>
        /// После установки желаемых значений параметров команды
        /// запись их в класс XMLConfigSend, а затем посылка на выполнение
        /// </summary>
        /// <remarks></remarks>
        private void SendQueryByHand()
        {
            if (ComboBoxTasks.SelectedIndex != -1)
            {
                //Dim runingTask As ManagerTaskApplication.TaskApplication = CType(ComboBoxTasks.SelectedItem, ManagerTaskApplication.TaskApplication).Clone
                ManagerTaskApplication.TaskApplication runingTask = (ManagerTaskApplication.TaskApplication)(((ManagerTaskApplication.TaskApplication)ComboBoxTasks.SelectedItem).Clone());

                mTarget.ConfigSend.Clear();
                mTarget.ConfigSend.AddRow(COMMAND_NAME, runingTask.Name, TypeParam.String);
                mTarget.ConfigSend.AddRow(COMMAND_DESCRIPTION, runingTask.Description, TypeParam.String);

                if (runingTask.Parameters.Values.Count > 0)
                {
                    dgvParameters.Rows[0].Cells[0].Selected = true;
                    foreach (ManagerTaskApplication.TaskApplication.Parameter itemParameter in runingTask.Parameters.Values)
                    {
                        //.AddRow($"{itemParameter.Number.ToString} {COMMAND_PARAMETER}",
                        //         dgvParameters.Rows(itemParameter.Number - 1).Cells(1).Value, itemParameter.Type)
                        mTarget.ConfigSend.AddRow($"{itemParameter.Number} {COMMAND_PARAMETER}", Convert.ToString(dgvParameters.Rows[itemParameter.Number - 1].Cells[1].Value), itemParameter.Type);
                    }
                }

                //Dim _random As Random = New Random(Convert.ToInt32((DateTime.Now.Millisecond >> 32)))
                mTarget.ConfigSend.AddRow(INDEX, Convert.ToInt32(RandomProvider.GetThreadRandom().NextDouble() * (Math.Pow(2, 31))).ToString(), TypeParam.String);
                mTarget.ConfigSend.AddRow(COMMAND_COMMANDER_ID, $"Компьютер:<{System.Environment.MachineName}> соединение:<{mTarget.HostName}> канал:<{mTarget.NamePiepSend}>", TypeParam.String);

                mTarget.ParrentManagerTargets.ParrentReaderWriterCommand.SendXMLCommand(mTarget);
            }
        }
        /// <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();
            }
        }
        /// <summary>
        /// Выделенная из списка задача клонируется.
        /// Выведенные в таблице строки параметров позволяют установить желаемые значения.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        /// <remarks></remarks>
        private void ComboBoxTasks_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ComboBoxTasks.SelectedIndex != -1)
            {
                ManagerTaskApplication.TaskApplication selectedTask = (ManagerTaskApplication.TaskApplication)ComboBoxTasks.SelectedItem;
                ButtonSend.Select();
                dgvParameters.Rows.Clear();

                if (selectedTask.Parameters.Values.Count > 0)
                {
                    dgvParameters.Rows.Add(selectedTask.Parameters.Count);

                    foreach (ManagerTaskApplication.TaskApplication.Parameter itemParameter in selectedTask.Parameters.Values)
                    {
                        dgvParameters.Rows[itemParameter.Number - 1].Cells[0].Value = (object)itemParameter.Number;
                        dgvParameters.Rows[itemParameter.Number - 1].Cells[1].Value = (object)itemParameter.Value;
                        dgvParameters.Rows[itemParameter.Number - 1].Cells[2].Value = (object)itemParameter.Type;
                        dgvParameters.Rows[itemParameter.Number - 1].Cells[3].Value = (object)itemParameter.Description;
                    }
                }
            }
        }