2017-07-30 7 views
-1

をダウンロードする私のコードは次のようになります。DownloadFileAsyncが0キロバイトのファイル

private static WebClient wc = new WebClient; 
... 
wc.DownloadFileAsync(URL, FilePath); 
wc.DownloadProgressChanged += (s, ev) => 
{ 
    //Do stuff 
}; 
wc.DownloadFileCompleted += (s, ev) => 
{ 
    //All the rest of the code 
}; 

しかし、できるだけ早くDownloadFileAsyncが実行されるよう、プログラムがすぐに0キロバイトのファイルの代わりに、ダウンロードしたファイル(エラーなしに発生)で私を残して閉じ、 。 私はそれがDownloadProgressChangedを完全に無視し、角括弧の中のコードを実行すると信じています。私はちょうど仮定しています

+0

ここで、DownloadFileAsyncが呼び出される場所のコードをさらに表示する必要があります。ダウンロードが完了する前にプログラムが終了する可能性があります。これはコンソールアプリケーションであるため、通常の 'DownloadFile'に変更し、ダウンロードファイル呼び出しの後に' DownloadFileCompleted'でコードを移動するだけです。 –

答えて

0

スコットチェンバレンが正しく言うように、あなたのプログラムは、DownloadFileCompletedが呼び出される前に終わったようです。この前提が正しい場合は、次のようにメインスレッドを待ちます。

var completed = new AutoResetEvent(false); 
wc.DownloadFileAsync(URL, FilePath); 
wc.DownloadProgressChanged += (s, ev) => 
{ 
    //Do stuff 
}; 
wc.DownloadFileCompleted += (s, ev) => 
{ 
    //All the rest of the code 
    completed.Set(); 
}; 
completed.WaitOne(); 
+0

今私はそれがうまくいかなかった理由を得る。 – user8390205

関連する問題