Моя программа загружает файл и проверяет хэш этого файла. Пока он хэширует файл, пользовательский интерфейс Windows зависает, когда компьютер начинает вычислять хэш.
Независимо от того, что я пытаюсь, пользовательский интерфейс останавливается до тех пор, пока не завершится хэширование этого файла. Есть ли способ асинхронно хешировать, не блокируя графический интерфейс и не заставляя пользователя думать, что программа вылетела
Я также пробовал буферизованный хеш, как видно из кода
// основная функция, вызываемая после успешной асинхронной загрузки файла, завершается
private void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
String = help.getHash(*some file directory*);
}
// справочный класс
public String getHash(String fileLoc)
{
using (FileStream stream = File.OpenRead(fileLoc))
{
HashAlgorithm sha = new SHA256CryptoServiceProvider();
byte[] checksum = sha.ComputeHash(stream);
return BitConverter.ToString(checksum).Replace("-", String.Empty);
}
}
// Я также пробовал буферизованный хеш следующим образом
public String getHashBuffered(String fileLoc)
{
using (var stream = new BufferedStream(File.OpenRead(fileLoc), 1200000))
{
HashAlgorithm sha = new SHA1CryptoServiceProvider();
byte[] checksum = sha.ComputeHash(stream);
return BitConverter.ToString(checksum).Replace("-", String.Empty);
}
}