/// <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); }; }