【发布时间】:2023-03-12 02:09:01
【问题描述】:
我正在异步加密一个文件,然后我想运行一个 void 对加密文件执行一些逻辑。我希望编译器等到文件完全加密。 那么我怎么能等待它完成呢?我必须使用“任务”吗? 谢谢。
public static async void AES_Encrypt(string path, string Password,Label lbl,ProgressBar prgBar)
{
byte[] encryptedBytes = null;
FileStream fsIn = new FileStream (path, FileMode.Open);
byte[] passwordBytes = Encoding.UTF8.GetBytes (Password);
byte[] saltBytes = new byte[] { 8, 2, 5, 4, 1, 7, 7, 1 };
MemoryStream ms = new MemoryStream ();
RijndaelManaged AES = new RijndaelManaged ();
AES.KeySize = 256;
AES.BlockSize = 128;
var key = new Rfc2898DeriveBytes(passwordBytes, saltBytes, 1000);
AES.Key = key.GetBytes(AES.KeySize / 8);
AES.IV = key.GetBytes(AES.BlockSize / 8);
AES.Mode = CipherMode.CBC;
CryptoStream cs = new CryptoStream (ms, AES.CreateEncryptor (), CryptoStreamMode.Write);
byte[] buffer = new byte[1048576];
int read;
long totalBytes = 0;
while ((read = fsIn.Read (buffer, 0, buffer.Length)) > 0) {
totalBytes += read;
double p = Math.Round((double)totalBytes * 100.0 / fsIn.Length,2,MidpointRounding.ToEven);
lbl.Text = p.ToString ();
prgBar.Value = (int)p;
Application.DoEvents ();
await cs.WriteAsync(buffer,0,read);
}
cs.Close();
fsIn.Close ();
encryptedBytes = ms.ToArray();
ms.Close();
AES.Clear ();
string retFile = path + ".cte";
File.WriteAllBytes (retFile, encryptedBytes);
Console.WriteLine ("ok");
}
【问题讨论】:
-
谢谢。我只是将它们用于测试和调试,我将删除它们。我是使用 Streams 的新手。 @HenkHolterman
标签: c# asynchronous encryption task