0
我一直在寻找所有看图像下载时如何更新progressview。我的当前下载的代码是UIProgressView跟踪状态下载ios monotouch
ThreadPool.QueueUserWorkItem(new WaitCallback(RetrieveImage),(object)cell);
private void RetrieveImage(object val)
{
CustomViewCell cell = (CustomViewCell)val;
int i = 0;
//lock(_imgDict){
//if (!_imgDict.ContainsKey(cell.imageUrl))
//{
NSUrl nsUrl = new NSUrl(cell.imageUrl);
NSData data = NSData.FromUrl(nsUrl);
if (data != null) {
InvokeOnMainThread (() => {
cell.imgImageView.Image = new UIImage (data);
i++;
cell.ProgressBar.Progress = (float)(i + 1)/3;
});
//_imgDict.Add (cell.imageUrl, data);
}
}
这一切确实是表现出与75%完成图像的顶部的进度条。没有真正显示正在更新的进度?如何在当前图像仍在下载时使用此当前线程更新进度栏。我看过其他例子,但没有真正能够遵循它们。
编辑:
ThreadPool.QueueUserWorkItem(new WaitCallback(RetrieveImage),(object)cell);
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
using(var client = new WebClient())
{
client.DownloadProgressChanged+=
delegate(object sender, DownloadProgressChangedEventArgs e)
{
if (e.TotalBytesToReceive != 0) {
InvokeOnMainThread (() => {
cell.PG.Progress = e.BytesReceived/
e.TotalBytesToReceive;
});
}
};
client.DownloadDataCompleted +=
delegate(object sender, DownloadDataCompletedEventArgs e)
{
if(e.Result!=null)
{
NSData data = NSData.FromArray(e.Result);
_imgDict.Add (cell.ImageUrl, data);
InvokeOnMainThread (() => {
cell.PG.Hidden=true;
cell.imgImageView.Image = UIImage.LoadFromData(data);
});
}
else
{
InvokeOnMainThread (() => {
cell.PG.Hidden=true;
cell.imgImageView.Image = UIImage.FromBundle("Images/retrydownload.png");
});
}
};
client.DownloadDataAsync(new Uri(cell.ImageUrl));
}
现在有了这个更新的代码我没有看到进度条,同时下载
我会避免WebClient的,因为它执行的UI线程大部分工作,而坚持这一:https://github.com/paulcbetts/ModernHttpClient –
那么我喜欢我的方式通过ios方式.Net方式的原因是,如果URL无效,NSData = null;我对UI做了一些不同的事情,.net对于webclient不起作用。我将如何去将NSLUrlConnection合并到我的代码中,你能否提供一些方向 – Jake
另外,如何在文件完成时隐藏进度条,因为将Frame更改为(0,0,0,0)并不完全它 – Jake