Async FTP Загрузить список файлов

1

Я пытаюсь перебрать список изображений и ftp их на сервер. Он частично работает, за исключением того, что он все еще блокирует мой поток пользовательского интерфейса. Хотя моя функция ftp является асинхронной, я предполагаю, потому что мой метод вызова не является, я не получаю результаты, которые я ищу. Вот что я получил. Что я делаю не так?

   public void UploadPictures()
    {
        //loop through each picture and upload
        for (int i = 0; i < this.items.Count; i++) {

            byte[] bytes;
            if (System.IO.Path.GetExtension (this.items [i].FileName.ToUpper()) == ".JPG") {
                using (var imageData = this.items[i].Image.AsJPEG())
                {
                    bytes = new byte[imageData.Length];
                    Marshal.Copy(imageData.Bytes, bytes, 0, Convert.ToInt32(imageData.Length));
                }
                var test=UploadPhoto(bytes,  this.items[i].FileName);

            }

            if (System.IO.Path.GetExtension (this.items [i].FileName.ToUpper()) == ".PNG") {
                using (var imageData = this.items[i].Image.AsPNG())
                {
                    bytes = new byte[imageData.Length];
                    Marshal.Copy(imageData.Bytes, bytes, 0, Convert.ToInt32(imageData.Length));
                }
                var test=UploadPhoto(bytes,  this.items[i].FileName);

            }


        }



    }



    public static async Task<string> UploadPhoto(byte[] photoBytes,  string filename)
    {
        FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create("ftp://XXXXXXXX/" + filename);
        request.Method = WebRequestMethods.Ftp.UploadFile;
        request.Credentials = new NetworkCredential ("user", "pass"); 
        request.UseBinary = true;

        request.ContentLength = photoBytes.Length;
        using (Stream s = request.GetRequestStream())
        {
            s.Write(photoBytes, 0,photoBytes.Length);
        }
        WebResponse ftpResp = await (Task<WebResponse>)request.GetResponseAsync ();

        return ftpResp.ToString();

    }
Теги:
xamarin
asynchronous
ftp

2 ответа

2

Все UploadPictures как async и await на UploadPhoto.

  • 0
    Я пробовал это раньше и не мог заставить его работать правильно. Я не могу точно вспомнить, в чем проблема. Тем не менее, я использовал Task Run, и это сработало (см. Мой пост). Спасибо!
0

Поэтому я вызвал функцию UploadPictures, используя Task run, и это сработало. Не уверен, что это самый правильный способ сделать это.

   Task.Run( () =>
                    {
                        UploadPictures();
            });

Ещё вопросы

Сообщество Overcoder
Наверх
Меню