暂停并恢复下载WPF

时间:2016-09-02 07:41:44

标签: c# multithreading

您好我正在开发一个面向.NET framework 4.5.2的WPF平台。我正在为我的应用程序编写一个下载程序。这是代码:

private void Download(Dictionary<int, FileAndLinkClass> MyLinks)
    {
        ApplicationDownloadThread = new Thread(() =>
        {
            foreach (KeyValuePair<int, FileAndLinkClass> item in MyLinks)
            {
                fileNo++;
                WebClient myWebClient = new WebClient();
                myWebClient.DownloadProgressChanged += MyWebClient_DownloadProgressChanged;
                myWebClient.DownloadFileCompleted += MyWebClient_DownloadFileCompleted;
                // Download the Web resource and save it into the current filesystem folder.
                string downloadedFileAdress = System.IO.Path.Combine(fileLocation, $"{item.Value.FileName}");
                myWebClient.DownloadFileAsync(new Uri(item.Value.Link), downloadedFileAdress);
                while (myWebClient.IsBusy)
                {

                }
            }
        });

        ApplicationDownloadThread.IsBackground = false;
        ApplicationDownloadThread.Start();

        //UnZipAndCreateUpdatePackage(MyLinks);

    }

现在我想在按钮点击下载必须暂停,在另一个按钮点击下载必须恢复。我尝试使用AutoReset事件的.set()属性和.Reset()属性,但它不起作用。 我需要帮助。我的按钮点击代码是:

    private AutoResetEvent waitHandle = new AutoResetEvent(true);

    private void StartDownloadBtn_Click(object sender, RoutedEventArgs e)
    {
        waitHandle.Set();

    }

    private void StopDownloadBtn_Click(object sender, RoutedEventArgs e)
    {
        waitHandle.Reset();

    }

我也试过这个链接How to pause/suspend a thread then continue it?。没有任何反应

我也经历过Adding pause and continue ability in my downloader,但我没有在上面的代码中加入解决方案,因为我也在更新UI上的下载进度。

1 个答案:

答案 0 :(得分:1)

嗯,我做了一些挖掘工作,显然,如果你Adding pause and continue ability in my downloader没有清楚,因为它使用了类中的字节流数据。也许您可以查看下面的链接,它还提供了一个VSF解决方案,用于下载带有暂停/恢复/停止功能的.zip文件扩展名。如果您需要更多帮助,请告诉我。

链接到CodeProject文章: C# .NET Background File Downloader