0

を使用するDownloadFileAsyncと、何かを「ブロック」しているようです。ファイルのダウンロード中にプログラムがより多くの文字列をダウンロードできるようにする必要があります (ファイルをダウンロードしていますが、ユーザーはディレクトリを検索してより多くのファイルをダウンロードするリンクを見つけることができます)。

UI は 100% ブロックされているわけではありませんが、ユーザーが [検索] ボタンをクリックしても正しく機能せず、クリックもDataGridView処理されません。ただし、検索ボタンはプログラムどおりにクリアDataGridViewされますが、ディレクトリを文字列として(非同期で)ダウンロードするために書いた awaitDownloadStringTaskAsyncは機能しません。ただし、ダウンロードが完了すると、検索が最終的に実行され、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;
        }
    }
4

0 に答える 0