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