private void Run()
        {
            _running.Set();

            try
            {
                while (!_stopped.WaitOne(_refreshRate))
                {
                    _context.Refresh();
                }
            }
            finally
            {
                _stopped.Reset();
                _running.Reset();
            }
        }
Beispiel #2
0
        /// <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);
            }
        }