コード例 #1
0
        public CWrapper(string executable, WrapperSettings settings, BufferHandler bufferHandler)
        {
            Settings = settings ?? throw new ArgumentNullException(nameof(settings));

            _bufferHandler = bufferHandler;
            Executable     = executable;
            Settings.Lock();

            ProcessStartInfo startInfo = new ProcessStartInfo()
            {
                FileName               = Executable,
                UseShellExecute        = false,
                CreateNoWindow         = !Settings.ShowWindow,
                RedirectStandardError  = Settings.RedirectStandardError,
                RedirectStandardInput  = Settings.RedirectStandardInput,
                RedirectStandardOutput = Settings.RedirectStandardOutput,
                StandardOutputEncoding = Settings.EncodingSettings.StandardOutputEncoding,
                StandardErrorEncoding  = Settings.EncodingSettings.StandardErrorEncoding,
                WorkingDirectory       = Settings.WorkingDirectory
            };

            _wrappedProcess = new Process
            {
                StartInfo           = startInfo,
                EnableRaisingEvents = true
            };

            _wrappedProcess.OutputDataReceived += (s, e) =>
            {
                OutputDataReceived?.Invoke(s, e);
                if (_bufferHandler != null)
                {
                    _bufferHandler.OutputDataWriter.WriteLine(e.Data);
                }
                OutputDataMRE.Set();
            };
            _wrappedProcess.ErrorDataReceived += (s, e) =>
            {
                ErrorDataReceived?.Invoke(s, e);
                if (_bufferHandler != null)
                {
                    _bufferHandler.ErrorDataWriter.WriteLine(e.Data);
                }
                ErrorDataMRE.Set();
            };
            _wrappedProcess.Exited += (s, e) =>
            {
                Executing = false;
                Exited?.Invoke(s, DateTime.Now);
                ExitedMRE.Set();
            };
        }
コード例 #2
0
 public CWrapper(string executable, WrapperSettings settings)
     : this(executable, settings, null)
 {
 }