0

インターネットから写真をダウンロードして「temp.jpg」というファイルに保存するプログラムを作成しています。私のプログラム ユーザーBackgroundWorkerと私は問題を抱えていBackgroundWorkerますBackgroundWorker

これを解決するためのアドバイスはありますか?

解決策は、タイムスタンプなどでファイルに名前を付けることです。

写真をtemp.jpgにダウンロードするには、使用しています

WebClient webClient = new WebClient();
try
{
    webClient.DownloadFile(foto, path);
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
} 

問題は、「temp.jpg」が最初に使用されていることBackgroundWorkerです。

4

2 に答える 2

0

編集

WebClient.DownloadFileがファイル ストリームの管理を処理するため、これはストリーム オブジェクトの破棄やファイル ハンドルの解放に関する問題ではありません。

WebClient.DownloadFileへの各同時呼び出しが一意のファイル名を使用していることを確認する必要があります。

メソッドを使用して、フレームワークによって一意の一時ファイル名を生成できますPath.GetTemporaryFileName


ファイルを閉じて、バックグラウンド ワーカーでハンドルを解放していることを確認する必要があります。これは通常、ファイル ストリームusingの周りのブロックで達成されます。IDisposable

複数のバックグラウンド ワーカーでファイルを同時にダウンロードする場合、各ワーカーには一意のファイル名が必要ですが、これが単一のバックグラウンド ワーカーの繰り返し実行で問題になる場合は、一意の名前は適切な解決策ではありません。新しい一意のファイル名を使用して問題を隠すと、リソースがリークするだけです。

于 2012-12-06T10:00:10.490 に答える
0

File access is a major chokepoint. A timestamp is not a weird solution.

Create your filename with something like:-

string outFile = 
  String.Format("temp_{0:dd}_{0:MMM}_{0:yyyy}_{0:hh}_{0:mm}_{0:ss}_{0:fff}.jpg",
    DateTime.Now);
于 2012-12-06T09:58:10.993 に答える