代码之家  ›  专栏  ›  技术社区  ›  etoisarobot

从Backgroundworker中执行的委托中获取值?

  •  2
  • etoisarobot  · 技术社区  · 15 年前

    我有一个Windows窗体应用程序,它加载一个dll@runtime并使用委托执行一个方法。 我想使用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;
            }
    

    下面是我在后台工作中的称呼

    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只是打开一个表单,让用户知道上传过程已经完成。

    1 回复  |  直到 15 年前
        1
  •  4
  •   Stephen Cleary    15 年前

    将结果值赋给 e.Result ShowUploadResults 作为 e、 结果 MSDN docs :

    如果您的操作产生一个结果,您可以将结果分配给 DoWorkEventArgs.Result RunWorkerCompleted 中的事件处理程序 RunWorkerCompletedEventArgs.Result

    推荐文章