protected override void BackgroundWorkerDoWork(object sender, DoWorkEventArgs args) { try { BackgroundWorker worker = (BackgroundWorker)sender; List <ItemDataClass> itemDataClass = new List <ItemDataClass>(); List <GithubAssetDetailData> assetDetailsList = GetAssetDetailsData(_Client).Result; int assetdetailCount = assetDetailsList.Count; if (assetdetailCount <= 0) { return; } int batchCount = (assetdetailCount / ((MAX_BATCH))) + 1; Debug.WriteLine(batchCount + " :: " + assetdetailCount); for (int i = 0; i < batchCount; i++) { int modCount = (assetdetailCount % MAX_BATCH); int maxBatchCount = (i + 1) * MAX_BATCH < assetdetailCount ? MAX_BATCH : modCount; ManualResetEvent[] manualResetEvents = new ManualResetEvent[maxBatchCount]; AssetDetailDataThread[] assetThread = new AssetDetailDataThread[maxBatchCount]; for (int j = 0; j < maxBatchCount; j++) { int percentage = ((i * MAX_BATCH) + j) / assetdetailCount; worker.ReportProgress(percentage); manualResetEvents[j] = new ManualResetEvent(false); AssetDetailDataThread simulationThread = new AssetDetailDataThread(j, assetDetailsList[(i * MAX_BATCH) + j].assetName, assetDetailsList[(i * MAX_BATCH) + j].xmlURL, manualResetEvents[j]); assetThread[j] = simulationThread; ThreadPool.QueueUserWorkItem(assetThread[j].ThreadPoolCallback, j); } WaitHandle.WaitAll(manualResetEvents); Debug.WriteLine("All Calculation are complete...."); for (int j = 0; j < maxBatchCount; j++) { AssetDetailDataThread asset = assetThread[j]; Dictionary <string, string> content = asset.Content; string assetName = asset.AssetName; GithubAssetDetailData assetData = new GithubAssetDetailData(); assetData.assetName = assetName; assetData.AssetContentString = content; itemDataClass.Add(assetData); } args.Result = itemDataClass; } base.BackgroundWorkerDoWork(sender, args); } catch (Exception e) { Debug.WriteLine("error in asset details :: " + e.Message + "\n" + e.StackTrace); } }
private async Task <List <GithubAssetDetailData> > GetAssetDetailsData(GitHubClient client) { List <GithubAssetDetailData> listData = new List <GithubAssetDetailData>(); var files = await client.Repository.Content.GetAllContents(GITHUB_REPO_OWNER, _RepoName); foreach (var file in files) { if (file.Name.Contains(".xml")) { GithubAssetDetailData data = new GithubAssetDetailData(); data.assetName = file.Name; data.xmlURL = file.DownloadUrl; listData.Add(data); } } return(listData); }