private void Flush(IObserver <CharactersOut> observer)
 {
     YieldNewLinesToOnNext(ref _bufferStdErr, buffer => observer.OnNext(ConsoleOut.ErrorOut(buffer)));
     FlushRemainder(ref _bufferStdErr, buffer => observer.OnNext(ConsoleOut.ErrorOut(buffer)));
     YieldNewLinesToOnNext(ref _bufferStdOut, buffer => observer.OnNext(ConsoleOut.Out(buffer)));
     FlushRemainder(ref _bufferStdOut, buffer => observer.OnNext(ConsoleOut.Out(buffer)));
 }
 private void OnNextSource(ConsoleOut c, IObserver <CharactersOut> observer)
 {
     c.OutOrErrrorCharacters(OutCharacters, ErrorCharacters);
     if (c.Error)
     {
         YieldNewLinesToOnNext(ref _bufferStdErr, buffer => observer.OnNext(ConsoleOut.ErrorOut(buffer)));
     }
     else
     {
         YieldNewLinesToOnNext(ref _bufferStdOut, buffer => observer.OnNext(ConsoleOut.Out(buffer)));
     }
 }
Пример #3
0
        public static IObservable <LineOut> ObserveErrorOutLineByLine(this Process process)
        {
            var receivedStdErr =
                Observable.FromEventPattern <DataReceivedEventHandler, DataReceivedEventArgs>
                    (h => process.ErrorDataReceived += h, h => process.ErrorDataReceived -= h)
                .Where(e => e.EventArgs.Data != null)
                .Select(e => ConsoleOut.ErrorOut(e.EventArgs.Data));

            return(Observable.Create <LineOut>(observer =>
            {
                var cancel = Disposable.Create(() => { try { process.CancelErrorRead(); } catch (InvalidOperationException) { } });
                return new CompositeDisposable(cancel, receivedStdErr.Subscribe(observer));
            }));
        }
 private static void OnNextFlush(CharactersOut c, IObserver <CharactersOut> observer) =>
 observer.OnNext(c.Error ? ConsoleOut.ErrorOut(c.Characters) : ConsoleOut.Out(c.Characters));