C# 从main方法将自定义类传递给ParameterizedThreadStart类
我有一个问题,我想通过我的对象类将两个名为Team的自定义类传递给我的Permeterized thread start类,但我无法解决这个问题。这是我的代码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
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ǝɹɐ-编写一个包含这两个团队的包装器类并使用它不是一个选项,为什么?哦,我忘了在没有状态参数的情况下启动线程是可能的,所以不需要这样做。我会编辑。哦,我忘了在没有状态参数的情况下启动线程是可能的,所以不需要这样做。我来编辑。