Прогресс загрузки в Google Drive API C# - PullRequest
0 голосов
/ 18 апреля 2020

Некоторое время я пытаюсь внедрить в свой проект блок прогресса, чтобы отобразить прогресс загрузки любого файла, который я загружаю с помощью Google Drive API. Загрузка работает отлично, но я могу получить загруженные байты. Это не обязательно должно быть мгновенным, но, например, получать его за каждые 5 секунд загрузки или что-то в этом роде.

Мой текущий источник для скачивания - это:

   public static void downloadFile(string filename, string fileId, string savePath, ArquivesON parentForm)
    {
        ArquivesON parent = parentForm;
        Diretorio diretorio = new Diretorio();

        var request = Program.service.Files.Get(fileId);
        var stream = new System.IO.MemoryStream();
        long? totalSize = Program.service.Files.Get(fileId).Execute().Size;

        try
        {
            request.MediaDownloader.ProgressChanged += (IDownloadProgress progress) =>
            {
                parent.updateStatusBar("Downloading", Color.White, (progress.BytesDownloaded * 100) / totalSize);
            };

            request.DownloadWithStatus(stream);
            SaveStream(stream, savePath + @"\" + filename);
            parent.updateStatusBar("Download completed", Color.Green, 100);
            stream.Dispose();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message, "An error has ocurred", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

И в качестве потока, используя метод writeTo:

        private static void SaveStream(System.IO.MemoryStream stream, string saveTo)
    {
        using (System.IO.FileStream file = new System.IO.FileStream(saveTo, System.IO.FileMode.Create, System.IO.FileAccess.Write))
        {
            stream.WriteTo(file);                
        }
    }

Я также думал, что смогу добиться прогресса writeTo, но я не знаю, возможно ли это вообще, потому что я на самом деле использую этот проект для обучения и я очень новичок ie.

...