private void Run() { _running.Set(); try { while (!_stopped.WaitOne(_refreshRate)) { _context.Refresh(); } } finally { _stopped.Reset(); _running.Reset(); } }
/// <summary> /// Starts the progress task list. /// </summary> /// <param name="action">The action to execute.</param> /// <returns>A <see cref="Task"/> representing the asynchronous operation.</returns> public async Task StartAsync(Func <ProgressContext, Task> action) { if (action is null) { throw new ArgumentNullException(nameof(action)); } var renderer = CreateRenderer(); renderer.Started(); try { using (new RenderHookScope(_console, renderer)) { var context = new ProgressContext(_console, renderer); if (AutoRefresh) { using (var thread = new ProgressRefreshThread(context, renderer.RefreshRate)) { await action(context).ConfigureAwait(false); } } else { await action(context).ConfigureAwait(false); } context.Refresh(); } } finally { renderer.Completed(AutoClear); } }