private void LoadAllPackagesThread()
        {
            // load and parse first page to have total item count
            this.Log().Debug("Load packages");
            var xmlDocument = LoadFeedDoc(0);
            var packageVersions = _xmlParser.parse(xmlDocument);
            var totalCount = _xmlParser.LastTotalCount;
            var pageSize = packageVersions.Count();

            // load other pages with thread pool
            IList<BackgroundPageObject> bgPageObjects = new List<BackgroundPageObject>();
            for (var skip = pageSize; skip < totalCount; skip += pageSize)
            {
                var backgroundPageObject = new BackgroundPageObject(skip, new ManualResetEvent(false));
                bgPageObjects.Add(backgroundPageObject);
                ThreadPool.QueueUserWorkItem(LoadPageAsync, backgroundPageObject);
            }

            // concat and return results
            _libDirHelper.ReloadFromDir();
            var allPackages = packageVersions.Select( PackageFromVersion );
            foreach (var backgroundPageObject in bgPageObjects)
            {
                backgroundPageObject.DoneEvent.WaitOne();
                allPackages = allPackages.Concat(
                        backgroundPageObject.PackageVersions.Select( PackageFromVersion )
                    );
            }
            OnRunFinshed(allPackages.ToList());
        }
        private void LoadAllPackagesThread()
        {
            // load and parse first page to have total item count
            this.Log().Debug("Load packages");
            var xmlDocument     = LoadFeedDoc(0);
            var packageVersions = _xmlParser.parse(xmlDocument);
            var totalCount      = _xmlParser.LastTotalCount;
            var pageSize        = packageVersions.Count();

            // load other pages with thread pool
            IList <BackgroundPageObject> bgPageObjects = new List <BackgroundPageObject>();

            for (var skip = pageSize; skip < totalCount; skip += pageSize)
            {
                var backgroundPageObject = new BackgroundPageObject(skip, new ManualResetEvent(false));
                bgPageObjects.Add(backgroundPageObject);
                ThreadPool.QueueUserWorkItem(LoadPageAsync, backgroundPageObject);
            }

            // concat and return results
            _libDirHelper.ReloadFromDir();
            var allPackages = packageVersions.Select(PackageFromVersion);

            foreach (var backgroundPageObject in bgPageObjects)
            {
                backgroundPageObject.DoneEvent.WaitOne();
                allPackages = allPackages.Concat(
                    backgroundPageObject.PackageVersions.Select(PackageFromVersion)
                    );
            }
            OnRunFinshed(allPackages.ToList());
        }