求一个简单的C#多线程的demo

小弟刚刚接触C#,系统自带的类不熟悉,不好下手。
具体是这样的:
有个基类 Bsae , 有个 虚函数 run(), 子类实现run()处理相关业务。
再来个 Manager类,管理一个线程池和一个Base对象的set。
把子类实现的run()弄成线程函数,然后跑起来。
ps:不需要考虑线程同步的问题,几个子线程之间不会有什么通信。

namespace MulThread
{
    class Program
    {
        static void Main(string[] args)
        {
            Manager manager = new Manager();
            Task task1 = new Task() { Msg="........",Time=100};
            Task task2 = new Task() { Msg="<<<<<<<",Time=200};
            manager.Tasks=task1;
            manager.Tasks=task2;
            manager.StartTask();
        }
    }

    abstract class Base
    {
        public abstract void Run();
    }

    class Task : Base
    {

        public string Msg { get; set; }
        public int Time { get; set; }

        public override void Run()
        {
            while (true)
            {
                Console.WriteLine(Msg);
                Thread.Sleep(Time);
            }
        }
    }

    class Manager
    {
        private IList<Base> taskList;

        public Base Tasks {
            set {
                taskList.Add(value);
            }
        }

        public Manager()
        {
            taskList = new List<Task>();
        }

        public void StartTask()
        {
            for (int i = 0; i < taskList.Count; i++)
            {
                Base task = taskList[i];
                Thread thread = new Thread(new ThreadStart(task.Run));
                thread.Start();
            }
        }
    }
    
}

追问

感谢耐心回答,再问个问题。
开的这些线程需要对同一个数据库操作,需要考虑线程同步的问题么?

追答

要看实际情况而定,应该没多大的影响

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-11
class BaseClass { public virtual void run() { } }
 class DeriveClass : BaseClass
 {
  public override void run()
  {
   // ...
   //base.run();
  }
 }
 class Manager
 {
  public List<BaseClass> list;
  public Manager()
  {
   // ctor
  }
  public void allRun()
  {
   foreach (var item in list) {
    new System.Threading.Thread(item.run).Start();
   }
  }
 }

追问

大侠,这个开个线程就撒手了,开的线程要管理起来,求补充,不甚感激。

追答

不是不要同步么, 系统自动调用就可以了.

追问

不用同步不过我需要挂起什么的
好吧,我没过脑子就追问了,已经木有问题了

第2个回答  2013-12-11

相似回答