0
私はいくつかの画像をダウンロードし、後で処理するarrarListに入れるプロジェクトに取り組んでいます。コードの次の部分は、問題の場所です。それは最初のダウンロードで動作しますが、何らかの理由でファイルの保存先は最初のダウンロード後にロックされます。私はそれを解除する方法を見つけることができないようです。 File.Delete( "BufferImg"); "BufferImg"がプログラムの他の場所で使用されていなかった場合、ファイルが別のプロセスで使用されているというエラーが表示されます。私は間違って何をしていますか?画像ファイルが破棄された後に解放されない
int attempcnt=0;
if (ok)
{
System.Net.WebClient myWebClient = new System.Net.WebClient();
try
{
myWebClient.DownloadFile(pth, "BufferImg");
lock (IMRequest) { IMRequest.RemoveAt(0); }
attempcnt = 0;
}
catch // will attempcnt 3 time before it remove the request from the queue
{
attempcnt++;
myWebClient.Dispose();
myWebClient = null;
if(attempcnt >2)
{
lock (IMRequest) { IMRequest.RemoveAt(0); }
attempcnt = 0;
}
goto endofWhile;
}
myWebClient.Dispose();
myWebClient = null;
using (Image img = Image.FromFile("BufferImg"))
{
lock (IMBuffer)
{
IMBuffer.Add(img.Clone());
MessageBox.Show("worker filled: " + IMBuffer.Count.ToString() + ": " + pth);
}
img.Dispose();
}
}
endofWhile:
File.Delete("BufferImg");
continue;
}
イメージが解放されなかった問題を解決しましたが、別の問題も発生しました。画像はストリームを使用して作成されているため、ここで指摘したようにストリームを閉じた後に保存しても問題はありませんhttp://stackoverflow.com/questions/1053052/a-generic-error-occurred-in-gdi-jpeg -image-to-memorystream – codeAsIGo
@codeAsigoストリームを使用して画像をロードすることとは関係ありません。画像をバイト配列に変換するのを助けたい場合は、ストリームを使用して読み込んだときに新しい質問を開き、それに答えさせます。 –