Я включаю UIActivityIndicator
в мой UIViewController
. Мне нужно принести файл с FTP.UIActivityIndicator не работает правильно Xamarin IOS
У меня есть кнопка на моем ViewController
, после нажатия этой кнопки загрузка начнется. Я положил UIActivityIndicator
(aiReceive
) на мой ViewController
, который появляется в остановленном состоянии на моем контроллере просмотра, но только анимируется после завершения загрузки файла.
Я делаю приложение iPad в Xamarin IOS.
Я добавил метод Async, но теперь получаю ошибку ниже. ждет оператор может быть использован только тогда, когда ее содержащая лямбда-выражение помечается модификатором асинхронном
public partial class FirstViewController : UIViewController
{
public override void ViewDidLoad()
{
base.ViewDidLoad();
btnReceiveData.TouchUpInside += (object sender, EventArgs e) =>
{
//BTProgressHUD.Show("Receiving Data..."); --> This Component is also not working,
aiReceive.StartAnimating();
await GetFileAsync());
BTProgressHUD.Dismiss();
};
}
async Task GetFileAsync()
{
using (var client = new HttpClient())
{
try
{
aiReceive.StartAnimating(); /* --> Inimation is not starting at this point. Animation Start After Downloading file, download takes time, i want to show animation in the mean while.*/
using (WebClient ftpclient = new WebClient())
{
try
{
ftpclient.Credentials = new System.Net.NetworkCredential("UserName", "Password");
string sourceFilePath = @"ftp://ftp.google.com/FileName.pdf";
var FileDownloadStart = UIAlertController.Create("Info", "Data file received.", UIAlertControllerStyle.Alert);
FileDownloadStart.AddAction(UIAlertAction.Create("Ok", UIAlertActionStyle.Default, null));
UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(FileDownloadStart, true, null);
//Downloading file from FTP.
ftpclient.DownloadFile(sourceFilePath, "C:\");
var FileDownloadAlert = UIAlertController.Create("Info", "Data file received.", UIAlertControllerStyle.Alert);
FileDownloadAlert.AddAction(UIAlertAction.Create("Ok", UIAlertActionStyle.Default, null));
UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(FileDownloadAlert, true, null);
}
catch (Exception ex)
{
File.Delete(EpazzDirectory + AuditorId.ToString());
var ExceptionAlert = UIAlertController.Create("Exception", ex.Message, UIAlertControllerStyle.Alert);
ExceptionAlert.AddAction(UIAlertAction.Create("Ok", UIAlertActionStyle.Default, null));
UIApplication.SharedApplication.KeyWindow.RootViewController.PresentViewController(ExceptionAlert, true, null);
}
}
}
}
}
}
Я обновил свой код в соответствии с вашими предложениями, но получить ошибку. «Ожидающий оператор может использоваться только тогда, когда его содержащее лямбда-выражение помечено асинхронным модификатором» – Khaksar
Да, как указано в официальном документе, ключевое слово 'await' может использоваться только в методе, отмеченном модификатором' async', поэтому 'public override async void ViewDidLoad()' – Nerkyator
Извините, просто понял, что вы подключили свой запрос к лямбда. Правильное размещение 'async' должно быть в лямбда так:' btnReceiveData.TouchUpInside + = async (object sender, EventArgs e) ' – Nerkyator