CSharp08.Program.PrepareUinstallList C# (CSharp) Метод

PrepareUinstallList() статический приватный Метод

static private PrepareUinstallList ( ) : List
Результат List
        static List<UinstallItem> PrepareUinstallList()
        {
            List<UinstallItem> list = new List<UinstallItem>();
            using (RegistryKey uinstallKey = OpenUninstallRegistryKey(false))
            {
                string[] subKeyNames = uinstallKey.GetSubKeyNames();

                // 显示等待对话框
                Form form = new Form();
                form.StartPosition = FormStartPosition.CenterScreen;
                form.Size = new Size(250, 50);
                form.MinimizeBox = false;
                form.MaximizeBox = false;
                form.Text = "正在查找已经安装的软件...";

                ProgressBar bar = new ProgressBar();
                bar.Dock = DockStyle.Fill;
                bar.Maximum = 100;
                bar.Minimum = 0;
                bar.Value = bar.Minimum;
                form.Controls.Add(bar);

                BackgroundWorker worker = new BackgroundWorker();
                worker.WorkerReportsProgress = true;
                worker.DoWork += (o, e) =>
                {
                    for (int i = 0; i < subKeyNames.Length; ++i)
                    {
                        string subKeyName = subKeyNames[i];
                        using (RegistryKey subKey = uinstallKey.OpenSubKey(subKeyName, false))
                        {
                            UinstallItem item = new UinstallItem();
                            if (BuildUinstallItem(subKey, ref item))
                            {
                                list.Add(item);
                            }
                        }
                        worker.ReportProgress(i * 100 / subKeyNames.Length);
                    }
                };
                worker.ProgressChanged += (o, e) =>
                {
                    bar.Value = e.ProgressPercentage;
                };
                worker.RunWorkerCompleted += (o, e) =>
                {
                    form.Close();
                };
                worker.RunWorkerAsync();

                form.ShowDialog();
                worker.Dispose();
                form.Dispose();
            }
            return list;
        }