0
我正在异步加密文件,之后我想运行一个void来对加密文件执行一些逻辑。我希望编译器等待文件完全加密。 那我该如何等待它完成?我有没有使用“任务”? 谢谢。在异步void完成后运行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 –