/// <summary>
        /// Fetches a range of items.
        /// </summary>
        /// <param name="startIndex">The start index.</param>
        /// <param name="count">The number of items to fetch.</param>
        /// <returns></returns>
        public override IList <BigFileLine> FetchRange(int startIndex, int pageCount, out int overallCount)
        {
            //Trace.WriteLine("FetchRangeBigText: " + startIndex + "," + pageCount);
            lock (_inputStream)
            {
                if (_disposed || (startIndex / 100 >= _100LineIndex.Count))
                {
                    overallCount = _lastFetchCount;
                    return(new List <BigFileLine>());
                }

                int  pos100BoundaryIndex = startIndex / 100;
                long pos100Boundary      = _100LineIndex[startIndex / 100];
                _inputStream.Seek(pos100Boundary, SeekOrigin.Begin);

                List <BigFileLine> list = _lineConverter.GetLines(_inputStream, startIndex - pos100BoundaryIndex * 100, Math.Min(startIndex + pageCount, Count) - startIndex);

                BlockingCollection <BigFileLine> columnCounter = StartCountingColumns();
                foreach (var line in list)
                {
                    columnCounter.Add(line);
                }
                columnCounter.CompleteAdding();

                overallCount = _lastFetchCount;
                return(list);
            }
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="DemoCustomerProvider"/> class.
        /// </summary>
        /// <param name="count">The count.</param>
        /// <param name="fetchDelay">The fetch delay.</param>
        public FileLinesProvider(string inputFilename, int maxRows, BigFileLine lineConverter)
        {
            _maxRows       = maxRows;
            _lineConverter = lineConverter;
            _inputFilename = inputFilename;
            _inputStream   = new FileStream(inputFilename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            var firstLine = _lineConverter.GetLines(_inputStream, 0, 1).FirstOrDefault();

            if (firstLine != null)
            {
                Header = firstLine.Columns.Aggregate((a, b) => a + "," + b);
            }
            _lineCountTask = Task.Run(() => CountLines(inputFilename, maxRows));
        }