Ejemplo n.º 1
0
            public void It_should_not_decrement_OperationsRunning_below_zero()
            {
                var operationTracker = new OperationTracker();

                operationTracker.EndOperation();
                Assert.That(operationTracker.OperationsRunning, Is.EqualTo(0));
            }
Ejemplo n.º 2
0
            public void It_should_set_IsOperationRunning_to_true()
            {
                var operationTracker = new OperationTracker();

                operationTracker.BeginOperation();
                operationTracker.EndOperation();

                Assert.That(operationTracker.IsOperationRunning, Is.False);
            }
Ejemplo n.º 3
0
            public void It_should_decrement_OperationsRunning()
            {
                var operationTracker = new OperationTracker();

                operationTracker.BeginOperation();
                operationTracker.EndOperation();

                Assert.That(operationTracker.OperationsRunning, Is.EqualTo(0));
            }
Ejemplo n.º 4
0
            public void It_should_invoke_setTargetPropertyAction_with_a_value_of_false()
            {
                var isOperationRunning = false;
                var operationTracker   = new OperationTracker(value => { isOperationRunning = value; });

                operationTracker.BeginOperation();
                operationTracker.EndOperation();

                Assert.That(isOperationRunning, Is.False);
            }
Ejemplo n.º 5
0
        private void ConsumerThread()
        {
            _consumerThreadTracker.BeginOperation();

            while (!_items.IsCompleted)
            {
                try
                {
                    var item = _items.Take();
                    if (_processItem(item))
                    {
                        Interlocked.Increment(ref _itemsSuccessful);
                    }
                    else
                    {
                        Interlocked.Increment(ref _itemsFailed);
                    }

                    var itemsProcessed = Interlocked.Increment(ref _itemsProcessed);
                    var totalItems     = Interlocked.Read(ref _totalItems);

                    if (itemsProcessed > 0)
                    {
                        var progress = ((double)itemsProcessed / totalItems) * 100.0;
                        if (progress > 100.0)
                        {
                            progress = 100;
                        }

                        Progress = progress;
                    }
                    else
                    {
                        Progress = 0;
                    }

                    //TODO: ConsumerThreadPool<T> - Raise Progress property changed?
                }
                catch (InvalidOperationException)
                {
                    // Move along nothing to see here...
                }
            }

            _consumerThreadTracker.EndOperation();
            //TODO: ConsumerThreadPool<T> - Raise IsCompleted property changed?

            Debug.WriteLine("ConsumerThread exiting... " + _consumerThreadTracker.OperationsRunning);
        }