2012-07-02 4 views
4

아니요 그런 종류의 기본적인 질문이 아닙니다. 나는 응용 프로그램을하고 있는데 scenerio 같은 파일을 다운로드 한 다음 FTP 서버에 업로드됩니다 다음 로컬 복사본이 삭제됩니다 한 항목은 해당 파일 이름에 대한 사전에 배치됩니다. 그래서, 코드는 내가 download_Completed의 이벤트 핸들러에 그 파일 이름을 전달하는 방법을 잘 모릅니다,EventHandler에 인수를 전달하는 방법

public void download_This_WebPage(string url, string cookies_String, string local_Saving_File_Name_With_Path) 
{ 
    WebClient wb = new WebClient(); 
    wb.Headers.Add(HttpRequestHeader.Cookie, cookies_String); 
    // Below I want to pass this local_File _Path to the event handler 
    wb.DownloadFileCompleted += new System.ComponentModel.AsyncCompletedEventHandler(wb,); 
    wb.DownloadFileAsync(new Uri(url), local_Saving_File_Name_With_Path + ".html"); 
} 

public void data_Download_Completed(Object sender, System.ComponentModel.AsyncCompletedEventArgs args) 
{ 
     //use the file name to upload the file to FTP 

} 

public FTP_Completed 
{ 
    // Delete the file 
} 

이하 그러나. 사람이

편집에 나를 인도 할 수 은 "대린"와 "프레드릭"에서 답변 주셔서 감사합니다. 서명을 속이는 방법 즉

void main_Fn() 
{ 
    string my_Data = "Data"; 
    some_object a = new some_object(); 
    some_Object.click_event += new eventHandler(click_Happened); 
    (Assume that the event passes two ints, I also want to pass the string "my_Data" 
     to "click_Happened") 
    some_object.start(); 
} 

void click_Happened(int a, int b) 
{ 
    // I want to get the string "my_Data" here. 
} 

아래처럼 (이미 정의) 이벤트 처리기에 사용자 정의 데이터를 전달 할 수있는 일반적인 방법이 있나요?

답변

6

당신은 통과 할 수 있습니다 userToken 인수의 파일 이름은 DownloadFileAsync()입니다. 작업이 완료되면, 그것은 data_Download_Completed()에 전달 된 AsyncCompletedEventArgs 인수의 UserState 특성에서 사용할 수 있습니다 : 다음

string filename = local_Saving_File_Name_With_Path + ".html"; 
wb.DownloadFileAsync(new Uri(url), filename, filename); 

: 내가 먼저 대답을했다 누가 잘 모릅니다

public void data_Download_Completed(Object sender, 
    System.ComponentModel.AsyncCompletedEventArgs args) 
{ 
    string filename = (string) args.UserState; 
    // Now do something with 'filename'... 
} 
+0

솔루션을 제공해 주셔서 감사합니다. 하지만, 어쨌든 eventhandler에 사용자 정의 된 데이터를 삽입 할 수 있습니까?. – prabhakaran

+1

@prabhakaran, 음,'class' 나'struct'의 인스턴스를 포함하여'userToken'에 어떤 타입이든 전달할 수 있습니다. 이것은'UserState'에서 사용 가능합니다. –

+0

내 문법 실수를 용서하십시오. 어떻게 모든 이벤트 처리기에이 일을 의미합니까? – prabhakaran

1

당신은 당신이 완료 핸들러에 UserState을 통과 할 수 있도록 DownloadFileAsync 방법의 3 번째 인수를 사용할 수 있습니다

// subscribe to the completed event 
wb.DownloadFileCompleted += data_Download_Completed; 
string file = local_Saving_File_Name_With_Path + ".html"; 
wb.DownloadFileAsync(new Uri("url"), file, file); 

및 핸들러 내부 :

public void data_Download_Completed(Object sender, AsyncCompletedEventArgs args) 
{ 
    // extract the filename from the UserState of the args 
    string file = args.UserState as string; 
    ... 

} 
+0

. 솔루션을 제공해 주셔서 감사합니다. 너에게 똑같은 질문. 사용자 정의 된 데이터를 이벤트 처리기에 주입 할 수있는 방법이 있습니까? – prabhakaran

+0

예, 내 대답에 설명 된대로 UserState 속성을 사용하고 있습니다. 간단한 문자열 대신 임의의 복잡한 객체를 전달할 수 있습니다. –

+0

내 문법 실수를 용서해주십시오. 어떻게 모든 이벤트 처리기에이 일을 의미합니까? – prabhakaran

관련 문제