我有一个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/

10-13 08:18