Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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);
        }