2010-06-14 43 views
0

我想下载一个sql语句后下载很多文件必须插入一条记录。 我正在使用System.Net.Client同步下载每个文件,但仍然可以异步完成。每次下载之间没有关系或依赖关系。下载一堆文件异步等待,直到上一次完成

起初,我只是试图使用WebClient.DownloadFileAsync,但关闭了程序并杀死了所有的下载进程/线程。其次,我试图创建一个像这样的等待例程;

while (processedFiles < totalFiles) 
     Thread.Sleep(1000) 

这冻结了一切。那么有人能告诉我采取哪种方式来实现这种异步?

+0

你是什么意思“关闭程序?”。也许你正在打破例外?尝试获取日志(有关说明,请参阅http://ferozedaud.blogspot.com/2009/08/tracing-with-systemnet.html)。并把你的tracelog放到pastebin.com上,我们可以看看。 – feroze 2010-06-17 01:15:34

+0

那么“关闭程序”不是发生了什么,它只是继续它的正常流程。这是一个SSIS脚本任务,它可以与没有暂停/等待输入的Windows Shell程序进行比较。所以一切都在进行,但是由于主流程已经完成,整个'程序'(任务)继续进行,异步进程被终止。我希望我有更多的错误/日志细节,但就是这样。当我在调试中运行SSIS任务并停止带有断点的主进程时,下载过程可以正确完成。 – 2010-06-17 08:21:31

回答

0

理想情况下,您只需使用DownloadFileAsync,然后连接DownloadFileCompleted事件以在下载完成时通知您。下面是代码如何可能的电缆铺设事件样片:

// Sample call : DownLoadFileInBackground2 ("http://www.contoso.com/logs/January.txt"); 
public static void DownLoadFileInBackground2 (string address) 
{ 
    WebClient client = new WebClient(); 
    Uri uri = new Uri(address); 

    // Specify that the DownloadFileCallback method gets called 
    // when the download completes. 
    client.DownloadFileCompleted += new AsyncCompletedEventHandler (DownloadFileCallback2); 
    // Specify a progress notification handler. 
    client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(DownloadProgressCallback); 
    client.DownloadFileAsync (uri, "serverdata.txt"); 
} 

您可以从一个WinForms应用中,当下载正在进行这将只是被闲置调用它。然后,当所有下载完成后,您可以关闭该程序或您需要执行的任何操作。

+0

嗨贾斯汀, 这是我用过的相同的代码。从来没有这样的画面;我有一个uri下载的数组,我做了一个foreach循环来执行client.DownloadFileAsync。在循环完成后,整个应用程序关闭(如没有暂停的控制台应用程序) – 2010-06-15 07:22:55

+0

嗯...下载客户端设计为在处理事件的应用程序内工作。应用程序需要闲置并处理事件而不是关闭。一个简单的方法可能是将应用程序迁移到Windows窗体,并在下载文件时放置某种进度对话框。 – 2010-06-15 14:19:40

相关问题