我有一个Windows窗体应用程序,该应用程序加载dll @运行时并使用委托执行方法。
完成的工作基本上是将文件上传到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个文件已成功上传”的内容?
最佳答案
将结果值分配给e.Result
。然后它将在您的ShowUploadResults
中以e.Result
的形式提供。引用MSDN docs:
“如果您的操作产生结果,则可以将结果分配给DoWorkEventArgs.Result
属性。这对于RunWorkerCompleted
属性中的RunWorkerCompletedEventArgs.Result
事件处理程序将可用。”
关于c# - 从在Backgroundworker中执行的代表获取值(value)回馈?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3293111/