缓存验证

                if (File.Exists(Application.StartupPath + "/Cache_" + (ci.ID * 10 - 2).ToString() + ".Cache"))
                {
                    pb.LoadAsync(Application.StartupPath + "/Cache_" + (ci.ID * 10 - 2).ToString() + ".Cache");
                }
                else
                {
                    pb.LoadAsync("ftp://" + FtpName + ":" + FtpPassword + "@" + FtpIP + ci.path);
                    if (Properties.Settings.Default.st_imagecache && !File.Exists(Application.StartupPath + "/Cache_" + (ci.ID * 10 - 2).ToString() + ".DownloadingCache"))
                    {
                        Cache_DownloadbyWebClient(Httpaddress + ci.path, Application.StartupPath + "/Cache_" + (ci.ID * 10 - 2).ToString() + ".DownloadingUniform");
                    }
                }

异步下载(Cache_DownloadbyWebClient)

    public void Cache_DownloadbyWebClient(string Http, string To)
    {
;
        WebClient client = new WebClient();
        client.DownloadFileAsync(new Uri(Http), To,To);
        client.DownloadProgressChanged += Cache_client_DownloadProgressChanged;
        client.DownloadFileCompleted += Cache_client_DownloadFileCompleted;


    }
    void Cache_client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
    {
        Cache_Bar.Value = e.ProgressPercentage; //进度条
    }
    void Cache_client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
    {

        FileInfo a = new FileInfo(e.UserState.ToString());
        string name = a.Name.Split('.')[0];
        //MessageBox.Show(a.Name + "\n" + a.FullName + "\n" + a.Directory + "\n" + a.DirectoryName);
        a.MoveTo(a.DirectoryName + "/"+name+".Cache");
        //MessageBox.Show(a.FullName);


    }

Per Aspera Ad Astra