我使用WebRequest以这种方式异步下载URL中的图像:
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,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,bytesRead,writeResult => { readState.AccumulatedResponse.EndWrite(writeResult); readState.Response.BeginRead(readState.Buffer,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);
解决方法
JPEG具有一种称为“渐进式JPEG”的特殊编码模式,其中数据在逐步更高细节的多次传递中被压缩. Windows 7为此拥有
built-in support.
原文地址:https://www.jb51.cc/csharp/93246.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。