2

私がやろうとしていることに対して、最善のアプローチは何でしょうか。私のアプリケーションには、バックグラウンドダウンロード操作を開始し、ダウンロードしたファイルに応じていくつかのアクションを実行するボタンがあります。

これは、「必要なデータがダウンロードされるとすぐにゲームが開始される」という状況のようなもので、ユーザーは引き続きメインフォームを使用できます。

private void btnStart_Click(object sender, EventArgs e)
{
    //execute some code

    Downloader.RunWorkerAsync(files); //this worker reports progress to the main form

    while (Downloader.IsBusy)
        Application.DoEvents();

    //execute some more code
}

私はそれをそのようにすることはまったく良くないことを知っています。

ダウンロード操作中にメインフォームが応答し続ける必要があるため、ダウンロードコードを同期的に実行できません。また、最終的なコードをダウンロード完了イベントに入れることもできません。これは、プログラムの他の多くの領域で使用され、「一般的な」ダウンロードシステムのままである必要があるためです。

だから、私がやりたいことをする方法はありますか?私は他の非同期メソッドの経験がありません。

4

2 に答える 2

2

使用するBackgrounWorker場合は、適切に構成する必要があります。BWにはRunWorkerCompleted、非同期作業の完了を処理するためにサブスクライブする必要があるイベントがあります。

于 2013-01-19T07:18:45.533 に答える
1

await.net 4.5 フレームワーク (および)の非同期プログラミング機能を使用する必要があると思いますasync

非同期プログラミングを参照してください

于 2013-01-19T07:19:29.013 に答える