私は非同期的にこのようWebRequestクラス使用してURLからイメージをダウンロードします。winformsを使用してC#でダウンロードの進行状況を示すWebから画像をダウンロードするには?
public void Download(string url)
{
byte[] buffer = new byte[0x1000];
WebRequest request = HttpWebRequest.Create(url);
request.Method = "GET";
request.ContentType = "image/gif";
request.BeginGetResponse(result =>
{
WebRequest webRequest = result.AsyncState as WebRequest;
WebResponse response = webRequest.EndGetResponse(result);
ReadState readState = new ReadState()
{
Response = response.GetResponseStream(),
AccumulatedResponse = new MemoryStream(),
Buffer = buffer,
};
readState.Response.BeginRead(buffer, 0,
readState.Buffer.Length, ReadCallback, readState);
}, request);
}
public void ReadCallback(IAsyncResult result)
{
ReadState readState = result.AsyncState as ReadState;
int bytesRead = readState.Response.EndRead(result);
if(bytesRead > 0)
{
readState.AccumulatedResponse.BeginWrite(readState.Buffer, 0, bytesRead, writeResult =>
{
readState.AccumulatedResponse.EndWrite(writeResult);
readState.Response.BeginRead(readState.Buffer, 0, readState.Buffer.Length, ReadCallback, readState);
}, null);
}
else
{
readState.AccumulatedResponse.Flush();
readState.Response.Close();
pictureBox1.Image = Image.FromStream(readState.AccumulatedResponse);
}
}
public class ReadState
{
public Stream Response { get; set; }
public Stream AccumulatedResponse { get; set; }
public byte[] Buffer { get; set; }
}
をし、それは大丈夫動作しますが、ブラウザがそうであるように私は、ダウンロードの進行状況を表示したいと思い、そしてときにのみ、それを表示しません終了する。
それは私が絵が、それはいくつかのデータを持っているにもかかわらず、無効であることを例外を取得完了する前に、私は
pictureBox1.Image = Image.FromStream(readState.AccumulatedResponse);
を行う場合。 とにかく部分データを表示していますか?
画像が有効でない場合、PictureBoxコントロールに関する限り、不運になります。限り、進捗状況...ファイルの大きさを知るために応答のContentLengthを確認してください。 –