Как мне заставить работать мой код C # Async и Wait? - PullRequest
0 голосов
/ 23 июня 2018

Может кто-нибудь, пожалуйста, помогите мне с этим, вот мой код, я хочу, чтобы задача распаковки ждала загрузки файла, но это не так, и это не позволяет мне ждать пустоты, я смотрел везде, и я не могу понять,это так, может кто-то отправить мне обратно рабочий код спасибо (обратите внимание, что весь этот код работает, но не с асинхронным):

        WebClient client = new WebClient();
        client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
        client.DownloadFileAsync(new Uri("https://webserver-test-1.000webhostapp.com/spacelightzipped.zip"), Environment.CurrentDirectory + "\\spacelightzipped.zip");

        String ZipPath = Environment.CurrentDirectory + "\\spacelightzipped.zip";
        String extractPath = Environment.CurrentDirectory;
        ZipFile.ExtractToDirectory(ZipPath, extractPath);

        System.Diagnostics.Process proc = new System.Diagnostics.Process
        {
            EnableRaisingEvents = false
        };
        proc.StartInfo.FileName = Environment.CurrentDirectory + "\\SpaceLightApp.exe";
        proc.Start();

1 Ответ

0 голосов
/ 23 июня 2018

Вы должны использовать событие WebClient.DownloadFileCompleted Событие, которое будет вызвано после полной загрузки файла, а затем выполнить любой код, который вы хотите для файла.

Так что вам нужнозарегистрировать событие для вашего веб-клиента.например:

client.DownloadFileCompleted += wc_DownloadFileCompleted;

Затем вызовите код для извлечения и выполнения в событии DownloadFileCompleted.

private static void wc_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
        {
            String ZipPath = Environment.CurrentDirectory + "\\spacelightzipped.zip";
            String extractPath = Environment.CurrentDirectory;
            ZipFile.ExtractToDirectory(ZipPath, extractPath);

            System.Diagnostics.Process proc = new System.Diagnostics.Process
              {
                 EnableRaisingEvents = false
              };
             proc.StartInfo.FileName = Environment.CurrentDirectory + "\\SpaceLightApp.exe";
             proc.Start();
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...