private static void UpdateProgress() { ProgressBar.Invoke(new InvokeDelegate(SetProgressBarValue), (int)((double)Status.CurrentProgress * 10000 / Status.TotalProgress)); if (Status.TotalProgress > 0) { ProgressLabel.Invoke(new InvokeDelegate(SetProgressLabel), string.Format("{0}/{1}", Status.CurrentProgress, Status.TotalProgress)); PercentageLabel.Invoke(new InvokeDelegate(SetPercentageLabel), string.Format("{0:0.##}%", (double)Status.CurrentProgress * 100 / Status.TotalProgress)); TimeUsageLabel.Invoke(new InvokeDelegate(SetTimeUsageLabel), "已用时间:" + TimeSpan.FromMilliseconds(Timer.ElapsedMilliseconds).ToString(@"hh\:mm\:ss\.fff")); var time = (double)Timer.ElapsedMilliseconds * (Status.TotalProgress - Status.CurrentProgress) / Status.CurrentProgress; if (time.HasValue()) { TimeEstimationLabel.Invoke(new InvokeDelegate(SetTimeEstimationLabel), "估计剩余时间:" + TimeSpan.FromMilliseconds(time).ToString(@"hh\:mm\:ss\.fff")); } else { TimeEstimationLabel.Invoke(new InvokeDelegate(SetTimeEstimationLabel), "等待开始"); } } else { StatusLabel.Invoke(new InvokeDelegate(SetStatusLabel), Status.CurrentStatus); ProgressLabel.Invoke(new InvokeDelegate(SetProgressLabel), "等待开始"); PercentageLabel.Invoke(new InvokeDelegate(SetPercentageLabel), "等待开始"); TimeUsageLabel.Invoke(new InvokeDelegate(SetTimeUsageLabel), "等待开始"); TimeEstimationLabel.Invoke(new InvokeDelegate(SetTimeEstimationLabel), "等待开始"); } }
public static void RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { StatusLabel.Invoke(new InvokeDelegate(SetStatusLabel), "等待开始"); ProgressLabel.Invoke(new InvokeDelegate(SetProgressLabel), "等待开始"); PercentageLabel.Invoke(new InvokeDelegate(SetPercentageLabel), "等待开始"); TimeUsageLabel.Invoke(new InvokeDelegate(SetTimeUsageLabel), "等待开始"); TimeEstimationLabel.Invoke(new InvokeDelegate(SetTimeEstimationLabel), "等待开始"); ProgressBar.Invoke(new InvokeDelegate(SetProgressBarValue), 0); //ProgressBar.Invoke(new InvokeDelegate(SetProgressBarMaximum), 100); //Console.WriteLine("Worker Reset"); WorkerInBusy.Set(); }
public SplashScreen() { Instance = this; InitializeComponent(); this.Load += (s, a) => { List <bool> bools = new List <bool>(); bools.AddRange(new bool[] { false, false, false }); ProgressWorker.WorkerReportsProgress = true; ProgressWorker.DoWork += (_, e) => { for (int i = 0; i < 103; i++) { Thread.Sleep(50); ProgressWorker.ReportProgress(i); if (i < 30) { ProgressLabel.Invoke((MethodInvoker) delegate { ProgressLabel.Text = $"Loading Sales {i}%"; }); } if (i > 30 && i < 60) { ProgressLabel.Invoke((MethodInvoker) delegate { ProgressLabel.Text = $"Initializing Accounts {i}%"; }); if (!bools[0]) { bools[0] = true; Accounts.InitializeDatabase(); } } if (i > 60 && i < 90) { ProgressLabel.Invoke((MethodInvoker) delegate { ProgressLabel.Text = $"Getting Accounts {i}%"; }); if (!bools[1]) { bools[1] = true; Accounts.GetAllAccounts(); } } if (i > 90 && i < 101) { Thread.Sleep(250); ProgressLabel.Invoke((MethodInvoker) delegate { ProgressLabel.Text = $"Loading Main Form {i}%"; }); if (!bools[2]) { bools[2] = true; this.Invoke((MethodInvoker) delegate { MainForm.Instance.InitializeMainForm(); }); } } if (i >= 101) { ProgressLabel.Invoke((MethodInvoker) delegate { ProgressLabel.Text = $"Welcome to Windows 11"; }); Thread.Sleep(1000); } } }; ProgressWorker.ProgressChanged += (_, e) => { ProgressLoader.Value = e.ProgressPercentage; DummyProgress.Value = e.ProgressPercentage; }; ProgressWorker.RunWorkerCompleted += (_, e) => { this.Hide(); MainForm.Instance.Show(); }; ProgressWorker.RunWorkerAsync(); }; }