2016-12-13 2 views
0

Я включаю 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); 
          } 

         } 
       } 
      } 
      } 

} 

Indicator is shown on the page all the time.

ответ

1

Вы блокируете поток пользовательского интерфейса, и это позволит предотвратить изменения, которые требуются сделайте для пользовательского интерфейса эффект (в данном случае вращающаяся анимация).

Лучший способ сделать это с помощью асинхр/ждут как:

aiReceive.StartAnimating(); 

await YourFTPRequestAsync(); 

aiReceive.StopAnimating(); 

Вот official MSDN documentation на асинхронном \ ждут и sample driven hint о том, как она работает

+0

Я обновил свой код в соответствии с вашими предложениями, но получить ошибку. «Ожидающий оператор может использоваться только тогда, когда его содержащее лямбда-выражение помечено асинхронным модификатором» – Khaksar

+0

Да, как указано в официальном документе, ключевое слово 'await' может использоваться только в методе, отмеченном модификатором' async', поэтому 'public override async void ViewDidLoad()' – Nerkyator

+0

Извините, просто понял, что вы подключили свой запрос к лямбда. Правильное размещение 'async' должно быть в лямбда так:' btnReceiveData.TouchUpInside + = async (object sender, EventArgs e) ' – Nerkyator

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