我有一个Windows窗体应用程序,它加载一个dll @ runtime并使用Delegate执行一个方法。 完成的工作基本上是将文件上传到WebApp并且非常耗时。 我想使用BackgroundWorker在后台运行它,然后弹出一个表单,让用户知道上传已完成以及成功上传了多少个文件。 但我不知道如何从BackgroundWorker中获取通过委托调用的方法返回的int。
所以这是执行工作的代码
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并将其传递给ShowUploadResults方法,以便显示“55个文件已成功上传”的内容?
答案 0 :(得分:4)
将结果值分配给e.Result
。然后,您的ShowUploadResults
可以e.Result
使用它。引自MSDN docs:
“如果您的操作产生结果,您可以将结果分配给DoWorkEventArgs.Result
属性。这将可用于RunWorkerCompleted
属性中的RunWorkerCompletedEventArgs.Result
事件处理程序。”