2011-08-17 15 views
1

ファイルのダウンロードが完了したときにトリガされたイベントの下のコードブロックにあるScriptクラスにアクセスしようとしています。どのように私はそれを行うことができるでしょうか?イベントの追加クラスへのアクセス方法

public void DownloadScript(Script script, string DownloadLocation) 
    { 


     AddLog(GenerateLog("Downloading Script", "Started", "Downloading " + script.Name + " from " + script.DownloadURL + ".")); 
     WebClient Client = new WebClient(); 
     Client.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(Client_DownloadFileCompleted); 
     Client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(Client_DownloadProgressChanged); 
     Client.DownloadFileAsync(new Uri(script.DownloadURL), DownloadLocation + "test1.zip"); 

    } 

トリガーされるイベントは次のとおりです。

public void Client_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e) 
    { 

     if (e.Error.Message != string.Empty) 
     { 
      AddLog(GenerateLog("Downloading Script", "Error", "There was an error downloading " + script.Name + " from " + script.DownloadURL + ". " + e.Error.Message)); 
      Console.WriteLine("Error"); 

     } 
     else 
     { 
      AddLog(GenerateLog("Downloading Script", "Done", "Finished downloading " + script.Name + " from " + script.DownloadURL + ".")); 
      Console.WriteLine("Done"); 
     } 

    } 

答えて

2

あなたはScriptオブジェクトをキャプチャして、余分なパラメータとしてハンドラに沿って、それを渡すためにラムダ式を使用することができます。

public void DownloadScript(Script script, string DownloadLocation) { 
    ... 
    WebClient Client = new WebClient(); 
    Client.DownloadFileCompleted += (sender, e) => Client_DownloadFileCompleted(
    sender, 
    e, 
    script); 
} 

public void Client_DownloadFileCompleted(
    object sender, 
    AsyncCompletedEventArgs e, 
    Script script) { 
    ... 
} 
+0

ありがとうございます!それがまさに私がこれを働かせるために必要なものです。 Iv'eは答えをどこからでも探していました。 – MattAitchison

関連する問題