private async void decryptToolStripMenuItem_Click(object sender, EventArgs e) { if (rab == null) { MessageBox.Show("Не выбран закрытый ключ", "", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); return; } if (Path.GetExtension(listSelectedKey.Items[0].Tag.ToString()).CompareTo(".privateKey") != 0) { MessageBox.Show("Не тот ключ!\r\nВыберите закрытый ключ", "", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); return; } string folder = BrouseFolder(); if (string.IsNullOrEmpty(folder)) { return; } foreach (ListViewItem item in listFiles.SelectedItems) { if (!IsExistInDecryptItems(item)) { item.SubItems[0].Tag = rab; item.SubItems[0].Name = folder; decryptingItems.Add(item); ProgressBar pb = CreateProgressBar(item, listFiles); ReachProgressBar filesBar = new ReachProgressBar(pb); filesBar.Tag = pb.Name; mainBar.AddProcess(filesBar); } else { MessageBox.Show($"Файл с именем: {item.Text}\r\nуже добавлен в очередь", "", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); return; } } if (decryptingItems.Count != listFiles.SelectedItems.Count) { return; } var progress = new Progress <ProgressInfo>(); progress.ProgressChanged += mainBar.Apdate; while (decryptingItems.Count > 0) { string decryptPath = decryptingItems[0].SubItems[0].Name + "\\" + Path.GetFileNameWithoutExtension(decryptingItems[0].Text); ReachProgressBar filesBar = mainBar.Processes.OfType <ReachProgressBar>().FirstOrDefault(q => (string)q.Tag == (string)decryptingItems[0].Tag); if (Path.GetExtension(decryptingItems[0].Tag.ToString()).CompareTo(".encrypted") != 0) { MessageBox.Show("Невозможно расшифровать файл " + decryptingItems[0].Text + "\n\rФайл не содержит расширение \".encrypted\"", "", MessageBoxButtons.OK, MessageBoxIcon.Error); listFiles.Controls.Remove(listFiles.Controls.OfType <ProgressBar>().FirstOrDefault(q => q.Name == (string)decryptingItems[0].Tag)); decryptingItems.Remove(decryptingItems[0]); mainBar.RemoveProcess(filesBar); continue; } progress.ProgressChanged += filesBar.Reach; try { await((RabinLib.Rabin)decryptingItems[0].SubItems[0].Tag).DecryptAsync(decryptingItems[0].Tag.ToString(), decryptPath, progress); } catch { MessageBox.Show( $"{decryptingItems[0].Text} Невозможно раскодировать с использованием ключа {((RabinLib.Rabin)decryptingItems[0].SubItems[0].Tag).Tag.ToString()}", "", MessageBoxButtons.OK, MessageBoxIcon.Error); progress.ProgressChanged -= filesBar.Reach; listFiles.Controls.Remove(listFiles.Controls.OfType <ProgressBar>().FirstOrDefault(q => q.Name == (string)decryptingItems[0].Tag)); decryptingItems.Remove(decryptingItems[0]); mainBar.RemoveProcess(filesBar); continue; } progress.ProgressChanged -= filesBar.Reach; listFiles.Controls.Remove(listFiles.Controls.OfType <ProgressBar>().FirstOrDefault(q => q.Name == (string)decryptingItems[0].Tag)); ListFilesRemoveItem(decryptingItems[0]); decryptingItems.Remove(decryptingItems[0]); AddFileItemToListView(decryptPath, listFiles, imageList1); } mainBar.Apdate(this, null); if (encryptingItems.Count == 0 && decryptingItems.Count == 0) { mainBar = new ProgressBarForManyProcesses(progressBar1, new List <ReachProgressBar>()); } }
public void AddProcess(ReachProgressBar process) { processes.Add(process); }
public void RemoveProcess(ReachProgressBar process) { processes.Remove(process); }
private async void GenKeyButton_Click(object sender, EventArgs e) { int bitLength; if (mainBar.Processes.Count != 0) { DialogResult res = MessageBox.Show( "Генерация ключа трудозатратный процесс\r\nРекомендуется подождать пока завершатся предыдущие процессы и сгенерировать ключ позже", "", MessageBoxButtons.OK, MessageBoxIcon.Asterisk); this.Close(); return; } if (!int.TryParse(bitLenghtTextBox.Text, out bitLength)) { MessageBox.Show("Неверно задано число\r\nПовторите ввод", "", MessageBoxButtons.OK, MessageBoxIcon.Error); bitLenghtTextBox.Text = null; return; } if (bitLength < 128) { MessageBox.Show("Число слишком мало\r\nВозьмите число большее 128", "", MessageBoxButtons.OK, MessageBoxIcon.Error); bitLenghtTextBox.Text = null; return; } if (bitLength > 4000) { DialogResult res = MessageBox.Show( "Число слишком велико, генерация ключа может занять много времени\r\nРекомендуется взять число меньшее 4000\r\nХотите продолжить?", "", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2); if (res == DialogResult.No) { bitLenghtTextBox.Text = null; return; } } RabinLib.Rabin rab = null; this.Visible = false; using (SaveFileDialog sfd = new SaveFileDialog()) { sfd.InitialDirectory = baseForm.lastDirectory; if (sfd.ShowDialog() == DialogResult.OK) { Progress <ProgressInfo> progress = new Progress <ProgressInfo>(); ReachProgressBar keyBar = new ReachProgressBar(0, 0); mainBar.AddProcess(keyBar); progress.ProgressChanged += keyBar.Reach; progress.ProgressChanged += mainBar.Apdate; await Task.Run(() => { rab = new RabinLib.Rabin(bitLength, progress); }); rab.KeyToFile(sfd.FileName); foreach (string key in Directory.GetFiles(sfd.FileName)) { baseForm.AddFileItemToListView(key, baseForm.listKeys, baseForm.imageList1); } if (sfd.FileNames.Length != 0) { baseForm.lastDirectory = Path.GetDirectoryName(sfd.FileNames[0]); } mainBar.RemoveProcess(keyBar); } } this.Close(); }