C# 在BackgroundWorker内部重用下载文件时遇到问题

C# 在BackgroundWorker内部重用下载文件时遇到问题,c#,winforms,download,C#,Winforms,Download,我有一个简单的课程: public class DownloadFile { ... public string GetFile(string fileUrl, string pathOut) { using (WebClient wc = new WebClient()) { wc.DownloadFile(new Uri(fileUrl), pathOut); return pathOu

我有一个简单的课程:

public class DownloadFile
{
    ...

    public string GetFile(string fileUrl, string pathOut)
    {
        using (WebClient wc = new WebClient())
        {
            wc.DownloadFile(new Uri(fileUrl), pathOut);
            return pathOut;
        }
    }
}
我从一个
BackgroundWorker
2次调用它,因为过程是下载并安装2个文件(在这里进行自定义安装)

问题是,第一个文件正常下载和安装,但第二个文件挂在
wc2.DownloadFile(新Uri(fileUrl),pathOut)上行和永远不会从那里得到的

使用
使用
我每次使用时都会处理
网络客户端
,因此我可以说:

// Created BackgroundWorker so the UI doesn't get blocked and I can
//   can show the progress in a log...
BackgroundWorker bkWrk = new BackgroundWorker();
bkWrk.WorkerReportsProgress = true;
bkWrk.ProgressChanged += (s, e) =>
{
    ReportProgress(String.Format("Progress: {0}%", e.ProgressPercentage));
};
bkWrk.DoWork = delegate {

    DownloadFile fileManager = new DownloadFile();

    fileManager.GetFile("http://domain.com/file_A.zip", "C:\\TEMP\\file_a.zip");
    fileManager.GetFile("http://domain.com/file_B.zip", "C:\\TEMP\\file_b.zip");
};
bkWrk.RunWorkerAsync();

while(bkWrk.IsBusy)
{
    // let's wait but fire all events 
    Application.DoEvents();
}
我看这里没有什么问题。。。但事实是,该文件挂起在
DownloadFile
方法上,甚至尝试使用Microsoft符号在方法内部导航,但都没有成功

甚至在请求中添加了一个头,但问题仍然存在

wc.Headers["User-Agent"] = "Mozilla/4.0 (Compatible; Windows NT 5.1; MSIE 6.0)" +
                           " (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
我是不是漏掉了什么明显的东西

DownloadFile文件管理器=新建DownloadFile(); fileManager.GetFile(“http://domain.com/file_A.zip", “C:\TEMP\file_a.zip”); fileManager.GetFile(“http://domain.com/file_B.zip", “C:\TEMP\file_b.zip”)

您知道wc.DownloadFile不是异步方法,对吗?这意味着您的后台工作人员必须先下载第一个文件,然后再下载第二个文件,然后才能完成其工作


它确实。。。更大的问题是,有时它会同时下载两个文件 没有问题:-/-


这只意味着您等待两个操作完成的时间足够长。

第二个文件是否存在?我知道这是一个显而易见的问题,但你必须问!它确实。。。更大的问题是,有时它下载两个文件时都不会出现问题:-/尝试使GetFile方法保持静态对于WebClient来说,没有这样的记录故障模式。在主线程上工作正常吗?您是否消除了服务器的问题?在
BackgroundWorker
中,我编写了调用这两个方法的显式代码,因为调用发生在
BackgroundWorker
中,第二个
GetFile()
将始终仅在第一个方法结束时触发。-我添加了包装
GetFile
的bkWrk代码,BackgroundWorker将在异步操作系统中一个接一个地下载这两个文件。DownloadFile不是异步操作系统。您想使用的是这是一种更好的方法,我不想使用
DownloadFileAsync
,它将在每个文件上调用线程,我已经从
BackgroundWorker
中找到了一个线程,如果我希望在
BackgroundWorker
中以同步模式进行操作,那么就不需要继续创建线程。如果您希望同步操作,那么就不需要使用异步(这样更简单)。但异步方法不会创建新线程,而是使用。