private void btnDownload_Click(object sender, EventArgs e) { dictionary = new Dictionary <BackgroundWorker, ConversionTaskParameters>(); ApplicationSettings.Instance.DefaultDownloadFolder = txbSaveFolder.Text; panel1.Controls.Clear(); string[] lines = richTextBox1.Text.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); int index = 0; foreach (string line in lines) { foreach (string url in GetVideoUrls(line)) { var progressIndicator = new ProgressBar(); var lblProcessState = new Label(); var lbFileName = new Label(); var lbNetSpeed = new Label(); panel1.Controls.Add(lbNetSpeed); panel1.Controls.Add(lbFileName); panel1.Controls.Add(lblProcessState); panel1.Controls.Add(progressIndicator); int step = 30; progressIndicator.Location = new Point(500, 30 + index * step); progressIndicator.Size = new Size(160, 15); lblProcessState.AutoSize = true; lblProcessState.Location = new Point(345, 30 + index * step); lbFileName.AutoSize = true; lbFileName.Location = new Point(22, 30 + index * step); lbNetSpeed.AutoSize = true; lbNetSpeed.Location = new Point(281, 30 + index * step); index++; count++; BackgroundWorker backgroundWorker = InitWorker(); var argument = new ConversionTaskParameters { ConversionProfile = cmbConvertionOptions.SelectedItem as ConversionOption, OriginalFileLocation = url, QualityIndex = cmbQuality.SelectedIndex, IndirectConversion = ApplicationSettings.Instance.UseIndirectConversion, BackgroundWorker = backgroundWorker, lbFileName = lbFileName, lbNetSpeed = lbNetSpeed, lblProcessState = lblProcessState, progressIndicator = progressIndicator }; dictionary.Add(backgroundWorker, argument); #if DEBUG var e1 = new DoWorkEventArgs(argument); backgroundWorker_DoWork(null, e1); #else backgroundWorker.RunWorkerAsync(argument); #endif } } }
private void backgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { var bw = sender as BackgroundWorker; ConversionTaskParameters par = dictionary[bw]; object userState = e.UserState; if (userState != null) { if (typeof(long).IsInstanceOfType(userState)) { par.lbNetSpeed.Text = string.Format("{0}kB/s", userState); } else if (typeof(int).IsInstanceOfType(userState)) { par.progressIndicator.Maximum = (int)userState; } else if (typeof(string).IsInstanceOfType(userState)) { var stateDescription = (string)userState; if (!stateDescription.StartsWith("***")) { par.lblProcessState.Text = stateDescription; Application.DoEvents(); } else { par.lbFileName.Text = stateDescription.Substring(3); } Application.DoEvents(); } else if (typeof(Exception).IsInstanceOfType(userState)) { MessageBox.Show(((Exception)userState).Message, Text, MessageBoxButtons.OK, MessageBoxIcon.Hand); } } if (e.ProgressPercentage <= par.progressIndicator.Maximum) { par.progressIndicator.Value = e.ProgressPercentage; } else { par.progressIndicator.Value = par.progressIndicator.Maximum; } }
private void btnDownload_Click(object sender, EventArgs e) { dictionary = new Dictionary<BackgroundWorker, ConversionTaskParameters>(); ApplicationSettings.Instance.DefaultDownloadFolder = txbSaveFolder.Text; panel1.Controls.Clear(); string[] lines = richTextBox1.Text.Split(new[] {'\r', '\n'}, StringSplitOptions.RemoveEmptyEntries); int index = 0; foreach (string line in lines) { foreach (string url in GetVideoUrls(line)) { var progressIndicator = new ProgressBar(); var lblProcessState = new Label(); var lbFileName = new Label(); var lbNetSpeed = new Label(); panel1.Controls.Add(lbNetSpeed); panel1.Controls.Add(lbFileName); panel1.Controls.Add(lblProcessState); panel1.Controls.Add(progressIndicator); int step = 30; progressIndicator.Location = new Point(500, 30 + index*step); progressIndicator.Size = new Size(160, 15); lblProcessState.AutoSize = true; lblProcessState.Location = new Point(345, 30 + index*step); lbFileName.AutoSize = true; lbFileName.Location = new Point(22, 30 + index*step); lbNetSpeed.AutoSize = true; lbNetSpeed.Location = new Point(281, 30 + index*step); index++; count++; BackgroundWorker backgroundWorker = InitWorker(); var argument = new ConversionTaskParameters { ConversionProfile = cmbConvertionOptions.SelectedItem as ConversionOption, OriginalFileLocation = url, QualityIndex = cmbQuality.SelectedIndex, IndirectConversion = ApplicationSettings.Instance.UseIndirectConversion, BackgroundWorker = backgroundWorker, lbFileName = lbFileName, lbNetSpeed = lbNetSpeed, lblProcessState = lblProcessState, progressIndicator = progressIndicator }; dictionary.Add(backgroundWorker, argument); #if DEBUG var e1 = new DoWorkEventArgs(argument); backgroundWorker_DoWork(null, e1); #else backgroundWorker.RunWorkerAsync(argument); #endif } } }