Xamarin UILabel没有更新

时间:2017-01-21 22:04:16

标签: xamarin xamarin.ios

我有一个基本的for循环,基本上是下载文件。只要它进展,它就应该更新标签。

通过在Stack Overflow搜索,我找到了使用SetNeedsDisplay()的方向。但它仍然拒绝更新。任何的想法 ?

for (int i = 0; i < files.Length; i++)
    {
                    status.Text = "Downloading file " + (i + 1) + " of " + files.Length + "...";
                    status.SetNeedsDisplay();
                    string remoteFile = assetServer + files[i];
                    var webClient2 = new WebClient();
                    string localFile = files[i];
                    string localPath3 = Path.Combine(documentsPath, localFile);
                    webClient2.DownloadFile(remoteFile, localPath3);
    }

1 个答案:

答案 0 :(得分:1)

如前所述,尝试避免在重要事务中阻止UI。 WebClient已经有了一个可以使用的异步方法。

webClient2.DownloadFileasync(new System.Uri(remoteFile), localPath3);

并且为了防止您从其他线程访问UI,请在访问UI元素时使用内置方法 InvokeOnMainThread

InvokeOnMainThread (() => {
    status.Text = "Downloading file " + (i + 1) + " of " + files.Length + "...";
    status.SetNeedsDisplay ();
});

最后使用使用语句来帮助您处理资源。

using (var webClient2 = new WebClient ())
{
    webClient2.DownloadFileAsync (new System.Uri (remoteFile), localPath3);
}

您也可以在using语句中进行迭代,这样您就不必为每个文件创建WebClient对象,而是使用相同的对象来下载files数组中可用的所有文件