Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从backgroundworker C返回多个结果#_C#_Return_Backgroundworker - Fatal编程技术网

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

C# 如何从backgroundworker C返回多个结果#,c#,return,backgroundworker,C#,Return,Backgroundworker,我的Backgroundworker从路径检索和计算,我需要返回字符串数组和double数组。如何将它们打包在一起? 我知道返回的结果如下: private void bgw_DoWork(object sender, DoWorkEventArgs e) { int result = 2+2; e.Result = result; } private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEv

我的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());
}
我也尝试过使用tuple,但我的软件无法识别它,我使用的是C#2008expressedition


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

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

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
}

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

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 BackgroundWorkResult
{
    public List<string> StringList {get;set;}
    public List<int> IntList {get;set;}
}
公共类后台工作结果
{
公共列表StringList{get;set;}
公共列表IntList{get;set;}
}
并在分配
e.Result=newbackgroundworkresult(){…}时将结果包装在其中


一般来说,为每种后台工作人员(如事件处理人员)创建一个类是很好的做法。这样,如果在下一版本的代码中,您需要从BackgroundWorker返回另一个信息,您只需向结果类添加属性。

我可以问一下,{get;set}是创建类时的固定格式吗?@wen它用于创建。您也可以使用字段,但也可以使用结构而不是类。