Ejemplo n.º 1
0
        ParserService(ITextBuffer textBuffer)
        {
            TextBuffer = textBuffer;

            WeakEventDispatcher.Connect(this, textBuffer);

            _parserObs = Observable.FromEventPattern <EventArgs>(
                handler => RebuildTriggered += handler,
                handler => RebuildTriggered -= handler)
                         .Select(_ => CreateBuildResultArgs())
                         .Throttle(ServiceProperties.ParserServiceThrottleTime)
                         .Select(args => Observable.DeferAsync(async token => {
                var parseResult = await BuildAsync(args, token).ConfigureAwait(false);

                return(Observable.Return(parseResult));
            }))
                         .Switch()
                         .ObserveOn(SynchronizationContext.Current)
                         .Subscribe(TrySetResult);

            _waitingForAnalysis = true;
            // Initiales Parsen antriggern
            Invalidate();
        }
 public static void Connect(ParserService service, ITextBuffer textBuffer) {
     var dispatcher=new WeakEventDispatcher(service);
     textBuffer.Changed += dispatcher.OnTextBufferChanged;
 }