让1个线程同时执行多个方法

时间:2015-01-11 13:17:30

标签: c# .net multithreading parallel-processing task-parallel-library

所以我在C#中有一个包含900多个条目的列表。对于列表中的每个条目,必须执行一个方法,尽管这些方法必须同时进行。首先我想到这样做:

public void InitializeThread()
{
   Thread myThread = new Thread(run());
   myThread.Start();
}

public void run()
{
   foreach(Object o in ObjectList)
   {
      othermethod();
   }
}

现在的问题是,这将为列表中的每个条目一次执行1个方法。但我希望他们中的每一个都能同时运行。

然后我尝试为每个条目创建一个单独的线程:

public void InitializeThread()
{
   foreach(Object o in ObjectList)
   {
      Thread myThread = new Thread(run());
      myThread.Start();
   }
}

public void run()
{
   while(//thread is allowed to run)
   {
      // do stuff
   } 
} 

但这似乎给了我system.outofmemory异常(不是一个惊喜,因为该列表有近1000个条目。 有没有办法同时成功运行所有这些方法?使用多个线程还是只使用一个?

我最终想要实现的目标是:我有一个GMap,并希望在其上有一些标记。这些标记代表火车。标记在某个时间点弹出GMap,并在到达目的地时消失。所有火车在地图上同时移动。

如果我需要发布更多我试过的代码,请告诉我。 提前谢谢!

1 个答案:

答案 0 :(得分:2)

您正在寻找的是Parallel.ForEach

  

对IEnumerable执行foreach操作,迭代可以在其中执行   并行运行。

你这样使用它:

Parallel.ForEach(ObjectList, (obj) =>
{
   // Do parallel work here on each object
});