public void Start(ChoConsoleProgressorStart consoleProgressorStart, ChoAsyncCallback callback, object state, int timeout) { ChoGuard.NotDisposed(this); int isStarted = Interlocked.CompareExchange(ref _isStarted, 1, 0); if (isStarted == 1) { return; } Interlocked.CompareExchange(ref _stopRequested, 0, 1); lock (ChoConsole.SyncRoot) { ChoConsole.Clear(); ChoConsole.ClearKeys(); IChoAsyncResult result = ChoConsole.OutputQueuedExecutionService.Enqueue(() => { _location = WriteNSavePosition(_msg + " "); _statusMsgLocation = new ChoPoint(_consolePercentageProgressorSettings.ProgressBarMarginX, _location.Y + 1); WriteSpinner("/"); }); result.AsyncWaitHandle.WaitOne(); } Action <ChoConsoleSpinProgressor> wrappedFunc = delegate { _threadToKill = Thread.CurrentThread; try { while (true) { if (_stopRequested == 1) { break; } ChoConsole.WriteLine(GetNextSpinChar().ToString(), _location, _foregroundColor, _backgroundColor); bool retValue = consoleProgressorStart(this, state); if (!retValue) { break; } } } catch (ThreadAbortException) { Thread.ResetAbort(); } }; _result = ChoAbortableQueuedExecutionService.Global.Enqueue <ChoConsoleSpinProgressor>(wrappedFunc, this); }
public void Start(ChoConsoleProgressorStart consoleProgressorStart, ChoAsyncCallback callback, object state) { Start(consoleProgressorStart, callback, state, Timeout.Infinite); }
public void Start(ChoConsoleProgressorStart consoleProgressorStart, int timeout) { Start(consoleProgressorStart, null, null, timeout); }
public void Start(ChoConsoleProgressorStart consoleProgressorStart) { Start(consoleProgressorStart, Timeout.Infinite); }