解释此语句+ =()=>的用途以及它的工作方式

时间:2018-09-06 14:25:29

标签: c#

任何人都可以解释以下代码,尤其是以下行:starter += () => {。我不确定它的功能以及整个代码的工作方式。

private void RunNetworkCheckThread()
{
    ThreadStart starter = CheckNetwork;

    starter += () =>
    {
        if (!_withNetwork)
        {
            RunNetworkCheckThread();
        }
        else
        {
            StartDrive();                   
        }
    };

    threadNetwork = new Thread(starter) { IsBackground = true }; 
    threadNetwork.Start();
}

3 个答案:

答案 0 :(得分:3)

ThreadStart是一种委托类型,可以容纳许多函数/方法。 符号()=> {}用于定义由操作员+ =

添加到您的委托中的方法

答案 1 :(得分:3)

  1. ThreadStart 是一个委托。
  2. ()=> {} 是lambda(可用于创建委托)
  3. + = 代表可以合并在一起。 ThreadStarter 被分配给 CheckNetwork 委托(当您调用 ThreadStarter 时,您调用 CheckNetwork )。但是随后在 ThreadStarter 中添加了一个由匿名函数(lambda函数)创建的委托。因此,现在当您调用ThreadStarter时,将执行CheckNetwork,然后将执行lambda函数。

更容易阅读:

private void RunNetworkCheckThread(){
        ThreadStart starter =  () =>
        {
           CheckNetwork();

           if (_withNetwork) StartDrive();
           else RunNetworkCheckThread();
        };

        threadNetwork = new Thread(starter) { IsBackground = true };
        threadNetwork.Start();
}

PS 此处提供了有关合并委托的更多信息: https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/delegates/how-to-combine-delegates-multicast-delegates

答案 2 :(得分:2)

ThreadStart启动器是委托。 CheckNetwork是目标方法。以下也是目标方法

() =>
    {
        if (!_withNetwork)
        {
            RunNetworkCheckThread();
        }
        else
        {
            StartDrive();                   
        }
    };

starter + =()-这就是使Starter多播委托的原因 How to: Combine Delegates

此行threadNetwork.Start()在同一线程中调用两个委托。因此CheckNetwork和Action方法正在同一新线程中执行。