繁体   English   中英

如何从Backgroundworker C#返回多个结果

[英]How to return multiple result from backgroundworker C#

我的Backgroundworker从路径中检索和计算,我需要返回一个字符串数组和一个double数组。如何将它们打包在一起? 我知道要返回的结果是这样的:

private void bgw_DoWork(object sender, DoWorkEventArgs e)
{
    int result = 2+2;
    e.Result = result;
}

private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    int result = (int)e.Result;
    MessageBox.Show("Result received: " + result.ToString());
}

我也尝试使用元组,但是我的软件无法识别它,我使用的是C#2008 Express Edition。

如何将两个不同类型的数组打包在一起?

创建数据传输类型。 例如:

class MyResult //Name the classes and properties accordingly
{
    public string[] Strings {get; set;}
    public double[] Doubles {get; set;}
}

private void bgw_DoWork(object sender, DoWorkEventArgs e)
{
    //Do work..
    e.Result = new MyResult {Strings =..., Doubles  = ...  };
}

private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
    MyResult result = (MyResult)e.Result;
    //Do whatever with result
}

创建一个自定义类,并将其传递给结果。

public class MyClass
{
    public MyClass(string[] strings, double[] doubles)
    {
        this.Strings = strings;
        this.Doubles = doubles;
    }

    public string[] Strings {get;set;}
    public double[] Doubles {get;set;}
}

private void bgw_DoWork(object sender, DoWorkEventArgs e)
{
    MyClass result = new MyClass(new string[] {"a", "b"}, new double[] {1d, 2d});
    e.Result = result;
}

private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
  MyClass result = (MyClass)e.Result;
  // process further
}

创建一个专门设计用来保存结果的类。

public class BackgroundWorkResult
{
    public List<string> StringList {get;set;}
    public List<int> IntList {get;set;}
}

并在分配e.Result = new BackgroundWorkResult() { ... };时将结果包装在其中e.Result = new BackgroundWorkResult() { ... };

通常,为每种背景工作者创建一个类是一个好习惯(例如Event Hanlders)。 这样,如果在代码的下一版本中,您需要从BackgroundWorker返回的其他信息,则只需将一个属性添加到结果类中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM