internal ProgressActiveScope(RangeProgress progress, LongRunningState isLongRunning) { _progress = progress; SetActive(true); if (isLongRunning == LongRunningState.Yes) { SetIsRunningForLong(true); } else { SetIsRunningForLong(false); if (isLongRunning == LongRunningState.Detect) { _delayForLongRunningSetFlag = new Timer(_delayForLongRunningSetFlag_Tick, null, 1000, -1); } } _internalProgress = ObservableProgress <int> .CreateForUi((value) => { _progress.Current = value; }); GC.SuppressFinalize(this); }
public MainViewModel(IEnumerable <IPlugin> plugins, ObservableProgress progress, EventSink eventSink, MainSettings settings, string logPath) { Plugins = plugins.OrderBy(a => a.Order); Settings = settings; SettingsList = new List <SettingsViewModel>() { new SettingsViewModel("View settings", new MainSettingsView { DataContext = settings }) }.Concat(ReadSettings(Plugins)); Progress = progress; LogPath = logPath; eventSink.NotifyEvent += (s, e) => { Notification = e; }; }
// For simplicity, this code updates a label directly. // In a real-world MVVM application, those assignments // would instead be updating a ViewModel property // which is data-bound to the actual UI. private async void StartButton_Click(object sender, RoutedEventArgs e) { MyLabel.Content = "Starting..."; var(observable, progress) = ObservableProgress.CreateForUi <int>(); string result; using (observable.Subscribe(value => MyLabel.Content = value)) result = await Task.Run(() => Solve(progress)); MyLabel.Content = $"Done! Result: {result}"; }
public MainViewModel(IEnumerable <IPlugin> plugins, ObservableProgress progress, EventSink eventSink, MainSettings settings, CommandManagerSettings commandSettings, string logPath, IDialogCoordinator dialogCoordinator, ChocoUpdater chocoUpdater) { _dialogCoordinator = dialogCoordinator; CommandSettings = commandSettings; #if DEBUG CheckUpdates(chocoUpdater); #endif Plugins = plugins.OrderBy(a => a.Order); Settings = settings; // build settings list SettingsList = new List <SettingsViewModel>() { new SettingsViewModel("View settings", new MainSettingsView { DataContext = settings }) } .Concat(ReadSettings(Plugins)); Progress = progress; LogPath = logPath; // subscribe to errors from serilog eventSink.NotifyEvent += (s, e) => { Notification = e; }; foreach (var plugin in Plugins) { plugin.OnStarted(); } Services.CommandManager.Settings = commandSettings; }
public void ProgressTest() { var observableProgress = new ObservableProgress<int>(); var queue = new Queue<int>(); var observable = observableProgress.Progress; observable.Subscribe(onNext: arg => queue.Enqueue(arg.Value)); for (int i = 0; i < 10; i++) { observableProgress.Report(i); } for (int i = 0; i < 10; i++) { Assert.AreEqual(i, queue.Dequeue()); } }
public void ProgressTest() { var observableProgress = new ObservableProgress <int>(); var queue = new Queue <int>(); var observable = observableProgress.Progress; observable.Subscribe(onNext: arg => queue.Enqueue(arg.Value)); for (int i = 0; i < 10; i++) { observableProgress.Report(i); } for (int i = 0; i < 10; i++) { Assert.AreEqual(i, queue.Dequeue()); } }
private async Task RefreshAsync(bool browseFromLastFound) { await ExecuteAsync((ct) => { Queue.RefreshInfo(); if (BrowseLimit.HasValue && BrowseLimit.Value > 0) { MessageInfo lastMessage = null; if (browseFromLastFound && Messages.Any()) { lastMessage = Messages.Last(); } else { Messages.Clear(); } MemorySearchCache = null; using (var ps = Progress.Start(BrowseLimit.Value, ct)) { using (var internalProgress = ObservableProgress <int> .CreateForUi((count) => { ps.SetTitle($"Browsing messages... [{count}]"); })) { ps.SetTitle("Browsing messages..."); foreach (var m in Queue.Browse(BrowseLimit.Value, Filter, ps.CancellationToken, internalProgress, lastMessage, CurrentConverter)) { Messages.Add(m); ps.ReportNext(); } } } StatusInfoViewModel.LastUpdateTimestamp = DateTime.Now; } }); }
protected override IObservable <int> DoWorkInternal(string filePath) { return(ObservableProgress.CreateAsync <int>( progressReporter => ReadFile(filePath, progressReporter))); }