J'inclus UIActivityIndicator
dans mon UIViewController
. Je dois importer un fichier depuis FTP.UIActivityIndicator ne fonctionne pas correctement Xamarin IOS
J'ai un bouton sur mon ViewController
, en cliquant sur ce bouton, le téléchargement va commencer. Je mets un UIActivityIndicator
(aiReceive
) sur mon ViewController
, qui apparaît à l'état arrêté sur mon contrôleur de vue, mais qui ne s'anime qu'une fois le téléchargement du fichier terminé. Je fais une application iPad sous Xamarin IOS.
J'ai ajouté la méthode Async, mais j'obtiens maintenant l'erreur ci-dessous. L'attend opérateur ne peut être utilisé lorsque son contenant l'expression lambda est marquée avec le modificateur 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);
}
}
}
}
}
}
Je mis à jour mon code selon vos suggestions, mais obtenir une erreur. "L'opérateur await ne peut être utilisé que si son expression lambda contient le modificateur async" – Khaksar
Oui, comme indiqué dans le document officiel, le mot-clé 'await' ne peut être utilisé que dans une méthode marquée avec le modificateur' async' 'public override async void ViewDidLoad()' – Nerkyator
Désolé, je viens de réaliser que vous avez connecté votre demande à un lambda. Le placement 'async' correct doit être dans le lambda donc:' btnReceiveData.TouchUpInside + = async (expéditeur d'objet, EventArgs e) ' – Nerkyator