private void Populate()
        {
            cats     = Shiftorium.GetCategories();
            upgrades = new Dictionary <string, ShiftoriumUpgrade> [cats.Length];
            int numComplete = 0;

            avail = backend.GetAvailable();
            foreach (var it in cats.Select((catName, catId) => new { catName, catId }))
            {
                var upl = new Dictionary <string, ShiftoriumUpgrade>();
                upgrades[it.catId] = upl;
                var t = new Thread((tupobj) =>
                {
                    foreach (var upg in avail.Where(x => x.Category == it.catName))
                    {
                        upl.Add(Localization.Parse(upg.Name) + " - " + upg.Cost.ToString() + "CP", upg);
                    }
                    if (it.catId == CategoryId)
                    {
                        this.Invoke(new Action(() =>
                        {
                            SetList();
                        }));
                    }
                    numComplete++;
                });
                t.Start();
            }
        }
        private void Populate()
        {
            cats     = Shiftorium.GetCategories();
            upgrades = new Dictionary <string, ShiftoriumUpgrade> [cats.Length];
            int numComplete = 0;

            avail = backend.GetAvailable();
            foreach (var it in cats.Select((catName, catId) => new { catName, catId }))
            {
                var upl = new Dictionary <string, ShiftoriumUpgrade>();
                upgrades[it.catId] = upl;
                var t = new Thread((tupobj) =>
                {
                    foreach (var upg in avail.Where(x => x.Category == it.catName))
                    {
                        upl.Add(Localization.Parse(upg.Name) + " - " + upg.Cost.ToString() + "CP", upg);
                    }
                    numComplete++;
                });
                t.Start();
            }
            while (numComplete < cats.Length)
            {
            }                                     // wait for all threads to finish their job
        }