示例#1
0
        /// <summary>
        /// Запуск процесса закачки
        /// </summary>
        public void Start(decimal sessNo)
        {
            ProcessStartInfo psi = new ProcessStartInfo
            {
                Arguments = $"ETLApp.dll {sessNo} -h",
                FileName  = "dotnet",
                RedirectStandardOutput = true,
                UseShellExecute        = false,
                WorkingDirectory       = AppDomain.CurrentDomain.BaseDirectory
            };

            prc       = Process.Start(psi);
            ProcessID = prc.Id;
            prc.EnableRaisingEvents = true;

            Logger.WriteToTrace($"Процесс закачки \"{ProgramID}\" ({ProcessID}) запущен.");
            IsExecuting = true;

            // Событие запуска
            OnStart?.Invoke(this, EventArgs.Empty);

            prc.Exited += (s, a) => {
                Logger.WriteToTrace($"Процесс закачки \"{ProgramID}\" ({ProcessID}) завершён.");
                // Обновляем статус после окончания закачки
                LastStatus  = GetStatus(sessNo);
                IsExecuting = false;

                OnExit?.Invoke(this, a);
                // После завершения процесса очищаем все обработчики
                OnStart?.GetInvocationList().ToList().ForEach(d => OnStart -= (StartEventHandler)d);
                OnExit?.GetInvocationList().ToList().ForEach(d => OnExit   -= (ExitEventHandler)d);
            };
        }
示例#2
0
 public virtual void GetExitElements(ref XmlDocument doc, ref XmlElement xState)
 {
     if (OnExit != null)
     {
         Delegate[] d = OnExit.GetInvocationList();
         for (int i = 0; i < d.Count(); i++)
         {
             string     name  = d[i].Target.GetType().ToString();
             XmlElement xExit = doc.CreateElement("Exit");
             xExit.SetAttribute("ClassName", name);
             name = d[i].Method.Name;
             xExit.SetAttribute("EventName", name);
             xState.AppendChild(xExit);
         }
     }
 }