本文整理汇总了C#中ReplaySubject.DistinctUntilChanged方法的典型用法代码示例。如果您正苦于以下问题:C# ReplaySubject.DistinctUntilChanged方法的具体用法?C# ReplaySubject.DistinctUntilChanged怎么用?C# ReplaySubject.DistinctUntilChanged使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ReplaySubject
的用法示例。
在下文中一共展示了ReplaySubject.DistinctUntilChanged方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: InlineViewer
public InlineViewer([NotNull] InlineViewerArgs args,
[NotNull] IClipboardHandler clipboardHandler,
[NotNull] ISchedulerProvider schedulerProvider,
[NotNull] ISelectionMonitor selectionMonitor,
[NotNull] ILogger logger,
[NotNull] IThemeProvider themeProvider)
{
if (args == null) throw new ArgumentNullException(nameof(args));
if (clipboardHandler == null) throw new ArgumentNullException(nameof(clipboardHandler));
if (schedulerProvider == null) throw new ArgumentNullException(nameof(schedulerProvider));
if (selectionMonitor == null) throw new ArgumentNullException(nameof(selectionMonitor));
if (themeProvider == null) throw new ArgumentNullException(nameof(themeProvider));
SelectionMonitor = selectionMonitor;
CopyToClipboardCommand = new Command(() => clipboardHandler.WriteToClipboard(selectionMonitor.GetSelectedText()));
_isSettingScrollPosition = false;
var lineProvider = args.LineProvider;
var selectedChanged = args.SelectedChanged;
var pageSize = this.WhenValueChanged(vm=>vm.PageSize);
//if use selection is null, tail the file
var scrollSelected = selectedChanged
.CombineLatest(lineProvider, pageSize, (proxy, lp, pge) => proxy == null ? new ScrollRequest(pge,0) : new ScrollRequest(pge, proxy.Start))
.DistinctUntilChanged();
var horizonalScrollArgs = new ReplaySubject<TextScrollInfo>(1);
HorizonalScrollChanged = hargs =>
{
horizonalScrollArgs.OnNext(hargs);
};
var scrollUser = _userScrollRequested
.Where(x => !_isSettingScrollPosition)
.Select(request => new ScrollRequest(ScrollReason.User, request.PageSize, request.FirstIndex));
var scroller = scrollSelected.Merge(scrollUser)
.ObserveOn(schedulerProvider.Background)
.DistinctUntilChanged();
var lineScroller = new LineScroller(lineProvider, scroller);
Count = lineProvider.Select(lp=>lp.Count).ForBinding();
MaximumChars = lineScroller.MaximumLines()
.ObserveOn(schedulerProvider.MainThread)
.ForBinding();
var proxyFactory = new LineProxyFactory(new TextFormatter(args.SearchMetadataCollection), new LineMatches(args.SearchMetadataCollection), horizonalScrollArgs.DistinctUntilChanged(), themeProvider);
//load lines into observable collection
var loader = lineScroller.Lines.Connect()
.Transform(proxyFactory.Create,new ParallelisationOptions(ParallelType.Ordered,3))
.Sort(SortExpressionComparer<LineProxy>.Ascending(proxy => proxy))
.ObserveOn(schedulerProvider.MainThread)
.Bind(out _data)
.DisposeMany()
.LogErrors(logger)
.Subscribe();
// track first visible index [required to set scroll extent]
var firstIndexMonitor = lineScroller.Lines.Connect()
.Buffer(TimeSpan.FromMilliseconds(250)).FlattenBufferResult()
.ToCollection()
.Select(lines => lines.Count == 0 ? 0 : lines.Select(l => l.Index).Max() - lines.Count + 1)
.ObserveOn(schedulerProvider.MainThread)
.Subscribe(first =>
{
try
{
_isSettingScrollPosition = true;
FirstIndex = first;
}
finally
{
_isSettingScrollPosition = false;
}
});
_cleanUp = new CompositeDisposable(lineScroller,
loader,
Count,
firstIndexMonitor,
SelectionMonitor,
MaximumChars,
horizonalScrollArgs.SetAsComplete(),
_userScrollRequested.SetAsComplete());
}
示例2: TailViewModel
public TailViewModel([NotNull] ILogger logger,
[NotNull] ISchedulerProvider schedulerProvider,
[NotNull] IFileWatcher fileWatcher,
[NotNull] ISelectionMonitor selectionMonitor,
[NotNull] IClipboardHandler clipboardHandler,
[NotNull] ISearchInfoCollection searchInfoCollection,
[NotNull] IInlineViewerFactory inlineViewerFactory,
[NotNull] GeneralOptionBindings generalOptionBindings,
[NotNull] ICombinedSearchMetadataCollection combinedSearchMetadataCollection,
[NotNull] IStateBucketService stateBucketService,
[NotNull] ITailViewStateRestorer restorer,
[NotNull] SearchHints searchHints,
[NotNull] ITailViewStateControllerFactory tailViewStateControllerFactory,
[NotNull] IThemeProvider themeProvider,
[NotNull] SearchCollection searchCollection,
[NotNull] ITextFormatter textFormatter,
[NotNull] ILineMatches lineMatches,
[NotNull] IObjectProvider objectProvider,
[NotNull] IDialogCoordinator dialogCoordinator)
{
if (logger == null) throw new ArgumentNullException(nameof(logger));
if (schedulerProvider == null) throw new ArgumentNullException(nameof(schedulerProvider));
if (fileWatcher == null) throw new ArgumentNullException(nameof(fileWatcher));
if (selectionMonitor == null) throw new ArgumentNullException(nameof(selectionMonitor));
if (clipboardHandler == null) throw new ArgumentNullException(nameof(clipboardHandler));
if (searchInfoCollection == null) throw new ArgumentNullException(nameof(searchInfoCollection));
if (inlineViewerFactory == null) throw new ArgumentNullException(nameof(inlineViewerFactory));
if (stateBucketService == null) throw new ArgumentNullException(nameof(stateBucketService));
if (searchHints == null) throw new ArgumentNullException(nameof(searchHints));
if (themeProvider == null) throw new ArgumentNullException(nameof(themeProvider));
if (searchCollection == null) throw new ArgumentNullException(nameof(searchCollection));
if (textFormatter == null) throw new ArgumentNullException(nameof(textFormatter));
if (lineMatches == null) throw new ArgumentNullException(nameof(lineMatches));
if (objectProvider == null) throw new ArgumentNullException(nameof(objectProvider));
if (dialogCoordinator == null) throw new ArgumentNullException(nameof(dialogCoordinator));
if (combinedSearchMetadataCollection == null) throw new ArgumentNullException(nameof(combinedSearchMetadataCollection));
Name = fileWatcher.FullName;
SelectionMonitor = selectionMonitor;
GeneralOptionBindings = generalOptionBindings;
SearchHints = searchHints;
CopyToClipboardCommand = new Command(() => clipboardHandler.WriteToClipboard(selectionMonitor.GetSelectedText()));
OpenFileCommand = new Command(() => Process.Start(fileWatcher.FullName));
OpenFolderCommand = new Command(() => Process.Start(fileWatcher.Folder));
CopyPathToClipboardCommand = new Command(() => clipboardHandler.WriteToClipboard(fileWatcher.FullName));
UnClearCommand = new Command(fileWatcher.Reset);
ClearCommand = new Command(fileWatcher.Clear);
KeyAutoTail = new Command(() => { AutoTail = true; });
OpenSearchOptionsCommand = new Command(async () =>
{
await Task.Run(() =>
{
var content = objectProvider.Get<SearchOptionsViewModel>(new Argument<ICombinedSearchMetadataCollection>(combinedSearchMetadataCollection));
dialogCoordinator.Show(this, content, x => content.Dispose());
});
});
SearchCollection = searchCollection;
SearchMetadataCollection = combinedSearchMetadataCollection.Local;
var horizonalScrollArgs = new ReplaySubject<TextScrollInfo>(1);
HorizonalScrollChanged = args => horizonalScrollArgs.OnNext(args);
_tailViewStateControllerFactory = tailViewStateControllerFactory;
//this deals with state when loading the system at start up and at shut-down
_persister = new TailViewPersister(this, restorer);
FileStatus = fileWatcher.Status.ForBinding();
//command to add the current search to the tail collection
var searchInvoker = SearchHints.SearchRequested.Subscribe(request => searchInfoCollection.Add(request.Text, request.UseRegEx));
//An observable which acts as a scroll command
var autoChanged = this.WhenValueChanged(vm => vm.AutoTail);
var scroller = _userScrollRequested.CombineLatest(autoChanged, (user, auto) =>
{
var mode = AutoTail ? ScrollReason.Tail : ScrollReason.User;
return new ScrollRequest(mode, user.PageSize, user.FirstIndex);
})
.Do(x => logger.Info("Scrolling to {0}/{1}", x.FirstIndex, x.PageSize))
.DistinctUntilChanged();
//User feedback to show file size
FileSizeText = fileWatcher.Latest.Select(fn=>fn.Size)
.Select(size => size.FormatWithAbbreviation())
.DistinctUntilChanged()
.ForBinding();
//tailer is the main object used to tail, scroll and filter in a file
var selectedProvider = SearchCollection.Latest.ObserveOn(schedulerProvider.Background);
var lineScroller = new LineScroller(selectedProvider, scroller);
MaximumChars = lineScroller.MaximumLines()
.ObserveOn(schedulerProvider.MainThread)
.ForBinding();
var lineProxyFactory = new LineProxyFactory(textFormatter, lineMatches, horizonalScrollArgs.DistinctUntilChanged(), themeProvider);
//.........这里部分代码省略.........