C#传递函数,返回和参数到Thread

时间:2015-05-12 08:40:19

标签: c# multithreading parameters lambda return

我创建了一个带参数和返回值的函数。这是以下代码:

static void Main(string[] args)
    {
        string url = "URL";

        Thread thread = new Thread(
            () => readFile(url)
            );
        thread.Start();
    }

    public static bool readFile(string url)
    {           
            bool result = true;
            return result;
    }

如何从线程内的方法中获取返回值?

2 个答案:

答案 0 :(得分:0)

传递给线程的方法的签名是void method(Object),换句话说,它不能返回任何内容。处理此问题的一种方法是允许线程和主代码访问同一个变量,该变量可用于表示结果:

class SomeClass
{
    private static bool threadResult;

    static void Main(string[] args)
    {
        string url = "URL";

        Thread thread = new Thread(() => readFile(url));
        thread.Start();
        ...
        // when thread completed, threadResult can be read
    }

    private static void readFile(string url)
    {           
        threadResult = true;
    }
}

答案 1 :(得分:0)

您应该使用任务来获得结果。像下面的东西

class myClass
{
  static void Main(string[] args)
  {
   Task<ReadFileResult> task = Task<ReadFileResult>.Factory.StartNew(() =>
    {
       string url = "URL";
       return readFile(url));
    });
   ReadFileResult outcome = task.Result;
  }

  private static ReadFileResult readFile(string url)
  {           
    ReadFileResult r = new ReadFileResult();
    r.isSuccessFull = true;
    return r;
  }
}
class ReadFileResult
{
     public bool isSuccessFull { get; set; }
}

有关详细信息,请参阅此MSDN条目。