2017-01-21 4 views
0

У меня есть базовый цикл, который в основном загружает файлы. Он должен обновлять ярлык, пока он прогрессирует.Xamarin UILabel не обновляется

При поиске здесь, в 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); 
    } 
+0

Вы используете это на фоновом потоке? – BytesGuy

+0

Nope.Nope.Nope. –

+0

Не блокируйте поток пользовательского интерфейса, выполняйте загрузку в фоновом потоке, что-то простое, как 'await Task.Run (...)' и обновляйте 'UILabel' в потоке пользовательского интерфейса. – SushiHangover

ответ

1

Как было предложено ранее, старайтесь избегать блокировки пользовательского интерфейса при совершении тяжелых транзакций. WebClient уже использует метод async, который вы можете использовать.

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

и помешать вам получить доступ к 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); 
} 

Вы также могли бы итерации внутри используя заявление таким образом, вы не должны создавать объект WebClient для каждого файла вместо этого вы будете использовать один и тот же объект, чтобы загрузить все файлы, доступные в вашем files массиве.

Смежные вопросы