2016-08-29 24 views
2

WebClient.DownloadFileAsync()メソッドを使用していて、WebClient.DownloadFileCompletedイベント(またはそれ以外のイベント)にパラメータを渡す方法を知りたかったので、呼び出されたメソッドで使用してください。WebClient.DownloadFileCompletedイベントへのパラメータの受け渡し

マイコード:

public class MyClass 
{ 
    string downloadPath = "some_path"; 
    void DownloadFile() 
    { 
     int fileNameID = 10; 
     WebClient webClient = new WebClient(); 
     webClient.DownloadFileCompleted += DoSomethingOnFinish; 
     Uri uri = new Uri(downloadPath + "\" + fileNameID); 
     webClient.DownloadFileAsync(uri,ApplicationSettings.GetBaseFilesPath +"\" + fileNameID); 
    } 

    void DoSomethingOnFinish(object sender, AsyncCompletedEventArgs e) 
    { 
     //How can i use fileNameID's value here? 
    } 

} 

がどのように私はDoSomethingOnFinish()にパラメータを渡すことができますか?

+0

ここで私が考えることができる唯一の方法は、グローバルプライベートフィールドにファイル名を保持し、 'DoSomethingOnFinish' –

+0

@ ChristophKnは私の元々の解決策でしたが、おそらくもっとエレガントなものがあると思っていました:)これはいくつかのダウンロードを扱うときに面倒になります – mihaa123

答えて

5

webClient.QueryString.Add("FileName", YourFileNameID);を使用して追加情報を追加できます。

その後

は、ファイル名を受け取るためにstring myFileNameID = ((System.Net.WebClient)(sender)).QueryString["FileName"];を使用して、あなたのDoSomethingOnFinish機能でそれにアクセスします。これは動作するはずです場合でも、あなたはユニティのUnityWebRequestクラスを使用する必要があり、

string downloadPath = "some_path"; 
void DownloadFile() 
{ 
    int fileNameID = 10; 
    WebClient webClient = new WebClient(); 
    webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(DoSomethingOnFinish); 
    webClient.QueryString.Add("fileName", fileNameID.ToString()); 
    Uri uri = new Uri(downloadPath + "\\" + fileNameID); 
    webClient.DownloadFileAsync(uri,ApplicationSettings.GetBaseFilesPath +"\\" + fileNameID); 
} 

void DoSomethingOnFinish(object sender, AsyncCompletedEventArgs e) 
{ 
    //How can i use fileNameID's value here? 
    string myFileNameID = ((System.Net.WebClient)(sender)).QueryString["fileName"]; 
} 

これは、コードがどのように見えるかです。あなたはおそらくそれについて聞いたことはありませんが、これは次のようになります:

+0

すぐにあなたの解決策をチェックしていただきありがとうございます。目標は別のスレッドでダウンロードを実装することでした。 UnityWebRequestはメインスレッド外で使用できますか? – mihaa123

+0

まず、あなたの質問のコードが 'スレッド'を使用していないことを理解してください。あなたは 'Thread'とは違う' Async'を使っています。しかし、 'Async'は' Thread'よりも使いやすいです。 'UnityWebRequest'に関しては、あなたは別のスレッドでそれを使用しないでください。 UnityのAPIを別のスレッドで使用することはできません。しかし、私の答えの両方のコードは同等であり、両方とも 'Async'を使用しています。 – Programmer

+0

'WebClient'を別の' Thread'で実際に使用したい場合、 'DownloadFileAsync'を' DownloadFile'に変更して、 'DownloadFile()'関数を別の 'Thread'から呼び出さなければなりません。 – Programmer

関連する問題