Я новичок в C# и Windows Forms.
Я использую библиотеку syncfusion C# для шифрования/дешифрования файлов Word.
Я использую Задачи Async/Await для пакетного шифрования файлов.
У меня нет проблем с шифрованием/дешифрованием одного файла или с шифрованием нескольких файлов.
Я столкнулся проблема при попытке расшифровать несколько файлов Word или массово.
При расшифровке одного файла с неверным паролем получаю исключение и все работает нормально.
Но во время массового расшифрования файлов с использованием await Task.WhenAll(tasks) внутри блока try-catch я не получаю никаких исключений, в то время как из первой задачи (первого файла для расшифровки) я должен получить исключение, потому что пароль неверный.
В течение всей недели я пробовал большинство предложенных решений везде, но безуспешно и не знаю, что мне делать.
Большое спасибо!
Код должен выдать исключение, если первая задача не выполнена, но это не так.
GetPathOrExtention gte = new GetPathOrExtention();
private void DecryptDOCXFiles(string fileName)
{
FileStream inputStream = new FileStream(fileName, FileMode.Open, FileAccess.Read);
WordDocument document = new WordDocument(inputStream, FormatType.Docx, TbDecPwd1.Text);
FileStream outputStream = new FileStream(gte.GetDirPath(fileName) + "\\" + gte.GetfileName(fileName).Replace("Encrypted-", ""), FileMode.Create, FileAccess.Write);
document.Save(outputStream, FormatType.Docx);
inputStream.Close();
outputStream.Close();
}
private async Task DecryptWordFiles()
{
OpenFileDialog ofd = new OpenFileDialog();
ofd.Filter = "docx files (*.docx)|*.docx|All files (*.*)|*.*";
ofd.Multiselect = true;
var tasks = new List();
if (TbDecPwd1.Text != "" && ofd.ShowDialog() == DialogResult.OK)
{
foreach (string file in ofd.FileNames)
{
if (gte.GetFileExtension(file) != ".docx")
{
LblProceeding.ResetText();
MessageBox.Show("Files version is not supported!" + '\n' + '\n' + "Only Word version 2019 and above are supported!", "P-GEN", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (gte.GetFileExtension(file) == ".docx")
{
LblProceeding.Text = "Proceeding... Do not exit the software!";
var task = Task.Run(() => DecryptDOCXFiles(file)).ContinueWith(p => progressBar1.PerformStep());
tasks.Add(task);
}
}
}
try
{
await Task.WhenAll(tasks);
LblProceeding.Text = "Done!";
MessageBox.Show("Files Successfully Decrypted!", "P-GEN", MessageBoxButtons.OK, MessageBoxIcon.Information);
LblProceeding.ResetText();
progressBar1.Visible = false;
}
catch (AggregateException)
{
LblProceeding.ResetText();
MessageBox.Show("Ensure the password is correct!" + '\n' + '\n' + "Ensure the files you want to decrypt are not opened in another software!", "P-GEN", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
catch (Exception)
{
LblProceeding.ResetText();
MessageBox.Show("Ensure the password is correct!" + '\n' + '\n' + "Ensure the files you want to decrypt are not opened in another software!", "P-GEN", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
private void BtnWordFilesDec_Click(object sender, EventArgs e)
{
_ = DecryptWordFiles();
}
Подробнее здесь: https://stackoverflow.com/questions/785 ... -exception
Tasks.WhenAll(tasks) не перехватывает никаких исключений ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение