2010-07-20 2 views
2

dll @ runtime을로드하고 대리인을 사용하여 메서드를 실행하는 Windows Forms App이 있습니다. 기본적으로 완료된 작업은 파일을 웹 애플리케이션에 업로드하는 것으로 시간이 오래 걸립니다. BackgroundWorker를 사용하여 백그라운드에서 실행 한 다음 업로드 완료 및 얼마나 많은 파일이 성공적으로 업로드되었는지 사용자에게 알려주는 팝업을 표시하고 싶습니다. 그러나 BackgroundWorker 내에서 대리인을 통해 호출되는 메서드에서 반환되는 int를 가져 오는 방법을 잘 모르겠습니다. 그래서 여기Backgroundworker 내에서 실행 된 대의원의 가치를 되 찾으세요?

는 작업을

private int UploadDocs(object sender, DoWorkEventArgs e) 
     { 
      Assembly a = Assembly.LoadFrom(this.txtReleaseScript.Text); 
      Type type = a.GetType("FileReleaseHandler", true); 
      string[] param = new string[8]; 
      //populate the array with parameters 
      IFileReleaseHandler handler(IFileReleaseHandler)Activator.CreateInstance(type, param); 
      ReleaseFileDelegate RFD = new ReleaseFileDelegate(handler.ReleaseFiles); 
      int numberOfFilesUploaded = RFD.Invoke(Source, Dest); 
      return numberOfFilesUploaded; 
     } 

을 수행하는 코드입니다 그리고 여기가 BackgroundWorker에

private void btRelease_Click(object sender, EventArgs e) 
     { 
      BackgroundWorker bw = new BackgroundWorker(); 
      bw.DoWork += new DoWorkEventHandler(UploadDocs); 
      bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.ShowUploadResults); 
      bw.RunWorkerAsync(); 
     } 

ShowUploadResults에 전화를 어떻게 바로 업로드 사용자가 알 수 있도록 양식을 엽니 다 프로세스가 완료되었습니다. 제 질문은 UploadDocs 메서드에서 반환 된 int를 가져 와서 "55 파일을 성공적으로 업로드했습니다"와 같이 표시 할 수 있도록 ShowUploadResults 메서드에 전달하는 방법입니다.

답변

4

e.Result에 결과 값을 할당하십시오. 그러면 ShowUploadResults에서 e.Result으로 사용할 수 있습니다. 에서 견적 MSDN docs :

". 당신의 작업이 결과를 생성하는 경우, 당신은 DoWorkEventArgs.Result 속성에 결과를 할당 할 수 있습니다 이것은 RunWorkerCompletedEventArgs.Result 속성에 RunWorkerCompleted 이벤트 핸들러에 사용할 수 있습니다."

+0

+1 - 자세한 정보 - http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.dowork.aspx –

관련 문제