Зависание формы Windows при выполнении хэша файла - PullRequest
0 голосов
/ 27 июня 2019

Моя программа загружает файл и проверяет хэш этого файла. Пока он хэширует файл, пользовательский интерфейс 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);
    }
}

1 Ответ

0 голосов
/ 05 июля 2019

Попробуй:

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);
    }
}

private void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
    var hash = await Task.Run(() => help.getHash(*some file directory*));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...