如何在C#控制台应用程序中管理所有正在运行的线程?

时间:2011-04-27 11:48:24

标签: c# multithreading thread-safety console-application threadpool

我在控制台应用程序中遇到问题托管线程并行 我正在运行10个线程并行&所有线程都做了一些特定的任务 如果任何任务结束/完成然后执行停止/结束线程并立即启动新线程实例。我想要10个线程,所以任何线程都要停止/结束然后它会生成新的线程。
但每次我想在控制台应用程序和运行模式中运行10个线程
它应该是使用C#控制台应用程序的并行工作。
我如何在C#控制台应用程序中运行10个线程?

2 个答案:

答案 0 :(得分:1)

在每个线程结束时锁定一些共享对象(lock(obj){})。 然后从您拥有的线程集合中删除当前线程。 如果collection.Count小于10,则创建一个新的并放入集合中。 解锁。

private List<Thread> threads = new List<Thread>();

private void ThreadFunction() {
  // do something
  // here before the lock
  lock (threads) {
    threads.Remove(Thread.CurrentThread);
    if (thread.Count < 10) {
      Thread t = new Thread(ThreadFunction);
      threads.Add(t);
      t.Start();
    }
  }
}

确保捕获线程内的所有异常,否则当线程异常发生时代码将失败。这是确保始终调用代码的锁定部分(除了线程abord异常,但这无关紧要)。

但如上所述,我认为你应该使用ThreadPool来完成这样的任务......

答案 1 :(得分:0)

.Net中有关线程的书是:http://www.albahari.com/threading/ 只有这一点可能会回答你的任何问题。

根据您使用这些线程的内容(我猜您可能在谈论在后台运行事务),您可能希望使用BackgroundWorker。

http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx

BackgroundWorker只允许您处理开始/结束/进度事件,使调试更不容易出错。