【问题标题】:webclient download file but not perform completedwebclient下载文件但未执行完成
【发布时间】:2015-03-03 07:06:30
【问题描述】:

我不想使用 downloadfileAsync 事件我使用了 downloadfile 任何已完成的事件都存在,仅用于下载文件、任何想法或任何其他方式,而不是告诉我提前谢谢。

  if (!item.IsInstalled && item.IsChecked)
                    {
                        string filename = Path.Combine(Path.GetTempPath(), "AlisAppTemp", "Silverlight");
                        using (StreamWriter sw = new StreamWriter(filename))
                        {
                            sw.WriteLine("Error");
                        }

                        client.DownloadProgressChanged += client_DownloadProgressChanged;
                        client.DownloadFileCompleted += client_DownloadFileCompleted;
                        client.DownloadFile(new Uri("http://download.microsoft.com/download/F/8/C/F8C0EACB-92D0-4722-9B18-965DD2A681E9/30514.00/Silverlight_x64.exe"), filename);
                        item.IsDownloaded = true;
                    }


 private void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            double byteIn = double.Parse(e.BytesReceived.ToString());
            double totalBytes = double.Parse(e.TotalBytesToReceive.ToString());
            double percentage = byteIn / totalBytes * 100;
            DownloadData = "Download " + e.BytesReceived / 1024 + " Of " + e.TotalBytesToReceive / 1024;
            this.CurrentProgress = e.ProgressPercentage;
        }

        private void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
        {
            if (e.UserState != null && e.UserState is AlisApplicationModel)
            {
                AlisApplicationModel ObjApp = e.UserState as AlisApplicationModel;
                ObjApp.IsDownloaded = true;
            }
            if (e.Cancelled)
            {
                this.Cleanup();

            }
            //if (!_bw.IsBusy)
            //{
            //    _bw.RunWorkerAsync();
            //}

        }

【问题讨论】:

  • @whatever 你投反对票的理由只是给出理由然后投反对票

标签: c# wpf download webclient


【解决方案1】:

DownloadFileCompletedDownloadProgressChanged 事件用于异步下载。

您正在使用同步的DownloadFile 方法,因此您的client_DownloadProgressChangedclient_DownloadFileCompleted 方法将永远不会被调用。

所以你必须使用DownloadFileAsync 而不是DownloadFile 方法。

【讨论】:

  • 所以如果我使用同步下载文件,我无法更新我的进度条?使用 downloadfileAsync 事件可以吗?
  • 是的。如果您使用DownloadFile(注意这是方法,而不是您所称的事件) - 那么DownloadProgressChangedDownloadFileCompleted 事件将不会被引发。如果您想处理这些事件,您必须使用DownloadFileAsync
  • @Dhru'soni 顺便说一句 - 你有什么理由不喜欢使用 DownloadFileAsync 而更喜欢 DownloadFile
  • 实际上 m 在后台使用 Silverlight 的进程安装,但是当我开始检查并安装一起运行的 bot 进程以及当 m 使用将完美执行的下载文件时。但我无法更新进度。正如你所说,我必须使用 downloadfileAsync 数据唯一的方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-04
  • 1970-01-01
  • 1970-01-01
  • 2015-12-30
  • 2023-03-10
相关资源
最近更新 更多