2012-12-17 19 views
5

dosya adını almak DownloadFileCompleted:web istemcisi böyle Dosyayı indirmek istediğiniz

WebClient _downloadClient = new WebClient(); 

_downloadClient.DownloadFileCompleted += DownloadFileCompleted; 
_downloadClient.DownloadFileAsync(current.url, _filename); 

// ... 

Ve indirme dosyası ile başka bir işlem başlatmak için gereken indirdikten sonra, ben DownloadFileCompleted olay kullanmaya çalıştı.

void DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e) 
{ 
    if (e.Error != null) 
    { 
     throw e.Error; 
    } 
    if (!_downloadFileVersion.Any()) 
    { 
     complited = true; 
    } 
    DownloadFile(); 
} 

Ama ben AsyncCompletedEventArgs indirilen dosyanın adını bilemez, yaptığım benim kendi

public class DownloadCompliteEventArgs: EventArgs 
{ 
    private string _fileName; 
    public string fileName 
    { 
     get 
     { 
      return _fileName; 
     } 
     set 
     { 
      _fileName = value; 
     } 
    } 

    public DownloadCompliteEventArgs(string name) 
    { 
     fileName = name; 
    } 
} 

Ama nood soru

ise yerine DownloadFileCompleted

Maalesef benim olayı diyoruz anlayamıyorum

+0

http://msdn.microsoft.com/en-us/library/17sde2xt(v=VS.100).aspx – Leri

+0

belki genel değişken – VladL

+0

ben olayları nasıl kullandığını biliyorum =) Benim olayımı nasıl kullanacağımı bilmiyorum Bunun yerine benim eventArgs – user1644087

cevap

12

Bir yol, bir kapatma oluşturmaktır. Bu, DownloadFileCompleted'inizin olay işleyicisini döndürmesi gerektiği anlamına gelir. DownloadFileComplete yönteme geçirilen dosya adı değişken yakalanan ve kapatılması depolanır böylece

 public AsyncCompletedEventHandler DownloadFileCompleted(string filename) 
     { 
      Action<object,AsyncCompletedEventArgs> action = (sender,e) => 
      { 
       var _filename = filename; 

       if (e.Error != null) 
       { 
        throw e.Error; 
       } 
       if (!_downloadFileVersion.Any()) 
       { 
        complited = true; 
       } 
       DownloadFile(); 
      }; 
      return new AsyncCompletedEventHandler(action); 
     } 

Ben _filename denilen değişken oluşturmak nedenidir. Bunu yapmadıysanız, kapatma içindeki dosya adı değişkenine erişemezdiniz.

+0

Büyük Teşekkürler! Çalışıyor! – user1644087

+0

Bu ilk defa C# 'da bir kapanış gördük. Bunun mümkün olduğunu bile bilmiyordum. Çok teşekkürler! –

2

Dosya yolu/dosya adı almak için olaydan DownloadFileCompleted civarı oynuyordum. Ben de yukarıdaki çözümü denedim ama bu benim beklentim gibi değildi o zaman ben Querystring değeri ekleyerek çözüm düşkün, Burada seninle kodu paylaşmak istiyorum.

string fileIdentifier="value to remember"; 
WebClient webClient = new WebClient(); 
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler (DownloadFileCompleted); 
webClient.QueryString.Add("file", fileIdentifier); // here you can add values 
webClient.DownloadFileAsync(new Uri((string)dyndwnldfile.path), localFilePath); 

Ve olay

bu gibi tanımlanabilir:

private void DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) 
{ 
    string fileIdentifier= ((System.Net.WebClient)(sender)).QueryString["file"]; 
    // process with fileIdentifier 
} 
İlgili konular