Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.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# 从main方法将自定义类传递给ParameterizedThreadStart类_C#_Multithreading_Visual Studio 2010 - Fatal编程技术网

C# 从main方法将自定义类传递给ParameterizedThreadStart类

C# 从main方法将自定义类传递给ParameterizedThreadStart类,c#,multithreading,visual-studio-2010,C#,Multithreading,Visual Studio 2010,我有一个问题,我想通过我的对象类将两个名为Team的自定义类传递给我的Permeterized thread start类,但我无法解决这个问题。这是我的代码 public void Game_Start(object starttime,Team _away,Team _home) { string text; DateTime StartTime = (DateTime)starttime; Console.WriteLine

我有一个问题,我想通过我的对象类将两个名为Team的自定义类传递给我的Permeterized thread start类,但我无法解决这个问题。这是我的代码

    public  void Game_Start(object starttime,Team _away,Team _home)
    {
        string text;
        DateTime StartTime = (DateTime)starttime;
        Console.WriteLine("Game Starts!");
        Show_Left(StartTime);
        text = Console.ReadLine();
        OnGoal += game_OnGoal;
        if (text == "Goal Away") OnGoal.Invoke(_away);
        if (text == "Goal Home") OnGoal.Invoke(_home);
    }
我无法传递和返回参数以及我的主要方法:

    static void Main(string[] args)
    {
        var away = new Team();
        var home = new Team();
        var counter = new Counter();
        Thread work = new Thread(counter.Game_Start);
        Timer timer = new Timer(counter.Times_up, work, 5400000, Timeout.Infinite);
        DateTime StartTime = DateTime.Now;
        work.Start(StartTime);
        work.Join();
        Console.Write("End");
        counter.Show_Left(StartTime);
        timer.Dispose();
        Console.Read();
    }

那么,我如何将两个团队从main传递到我的类中呢?我应该更改什么?

而是传递一个包装类:

public class Teams
{
  public Teams(Team home, Team away)
  {
     Home = home;
     Away = away;
  }

  public Team Home { get; private set; }

  public Team Away { get; private set; }
}

改为传递单个包装器类:

public class Teams
{
  public Teams(Team home, Team away)
  {
     Home = home;
     Away = away;
  }

  public Team Home { get; private set; }

  public Team Away { get; private set; }
}

使用lambda Expersion:

Thread.Start(()=>Game_Start(starttime, home, away));

注意:这在技术上与@Oded建议的相同,只是编译器创建了包装类-作为闭包。

使用lambda表达式:

Thread.Start(()=>Game_Start(starttime, home, away));

注意:这在技术上与@Oded建议的相同,只有包装类是由编译器创建的-作为闭包。

那么您希望通过哪些团队?@JonSkeet两个团队离开和回家您是指您在某处找到的字段,但没有显示给我们吗?你没有给我们足够的上下文。@JonSkeet我在我的计数中编辑了我想要的客场和主场的上下文。Game_Start Method好的,你想要哪个队通过?@JonSkeet客场和主场你是指你在某处得到的字段,但没有显示给我们吗?您没有为我们提供足够的上下文。@JonSkeet我在count.Game_Start method中编辑了我想要离开和回家的上下文。我想在counter.Game_Start method中从main方法传递两个团队对象。@rNuǝɹɐ-并编写一个包含这两个团队的包装器类,而不是使用它,为什么?我想从main方法在counter.GameɹStart方法中传递两个团队对象。@rNuǝɹɐ-编写一个包含这两个团队的包装器类并使用它不是一个选项,为什么?哦,我忘了在没有状态参数的情况下启动线程是可能的,所以不需要这样做。我会编辑。哦,我忘了在没有状态参数的情况下启动线程是可能的,所以不需要这样做。我来编辑。