在c#中下载文件异步'块'?

时间:2015-12-04 05:06:26

标签: c# webclient downloadfileasync

当我使用DownloadFileAsync时,它似乎“阻止”某些东西。我需要程序能够在文件下载时下载更多字符串(下载文件,但用户仍然可以在目录中搜索链接以下载更多文件)。

用户界面不是100%被阻止,但是当用户点击“搜索”按钮时,它无法正常工作,DataGridView中的点击也无法处理。然而,搜索按钮会按照编程清除DataGridView,但等待我编写的以将字符串下载(与DownloadStringTaskAsync异步)的目录不起作用。但是,当下载完成后,搜索最终会通过,然后填充DataGridView,这对我来说似乎是非常不正常的行为。

当我注释掉DownloadFileAsync时,一切都能够再次正常执行。我还试图评论我已经实施的事件处理程序,但这也无法解决问题。我不确定,谢谢你的帮助。

一些代码段:

下载文件:

var bmclient = new WebClient();
bmclient.DownloadFileAsync(new Uri(downloadURL), Path.Combine(Application.StartupPath, originalFileName + ".nexd"));
bmclient.DownloadProgressChanged += (o, e) =>
        {
            int rowIndex = -1;
            DataGridViewRow row = form1.dataGridView2.Rows
                .Cast<DataGridViewRow>()
                .Where(r => r.Cells[0].Value.ToString().Equals(setID))
                .First();
            rowIndex = row.Index;
            MethodInvoker action = () => form1.dataGridView2[2, rowIndex].Value = e.ProgressPercentage.ToString() + "%";
            form1.BeginInvoke(action);
        };

搜索目录,该目录由主窗体上的按钮调用:

public static async Task<string> GetBloodcatSearch(string query)
    {
        var return_data = string.Empty;

        try
        {
            using (var client = new WebClient())
            {
                return return_data = await client.DownloadStringTaskAsync(new Uri("directory/" + query));
            }
        }
        catch (Exception e)
        {
            return null;
        }
    }

0 个答案:

没有答案