异步FTP上传文件列表

时间:2014-09-10 21:57:40

标签: c# .net asynchronous ftp xamarin

我正在尝试遍历图像列表并将它们ftp到服务器。它部分工作,除了它仍然阻止我的UI线程。即使我的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();

    }

2 个答案:

答案 0 :(得分:2)

UploadPictures上将async标记为awaitUploadPhoto

答案 1 :(得分:0)

所以我使用Task run调用了我的UploadPictures函数,这很有用。不确定这是否是最正确的方法。

   Task.Run( () =>
                    {
                        UploadPictures();
            });
相关问题