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 –