从Backgroundworker中执行的代表获取价值?

时间:2010-07-20 18:28:47

标签: c# winforms

我有一个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个文件已成功上传”的内容?

1 个答案:

答案 0 :(得分:4)

将结果值分配给e.Result。然后,您的ShowUploadResults可以e.Result使用它。引自MSDN docs

“如果您的操作产生结果,您可以将结果分配给DoWorkEventArgs.Result属性。这将可用于RunWorkerCompleted属性中的RunWorkerCompletedEventArgs.Result事件处理程序。”